Mam aplikację .NET (połączenie C# i VB.NET), w której chciałbym wyświetlić okno dialogowe logowania do systemu Windows (lub moje własne okno dialogowe) i uwierzytelnić użytkownika przy użyciu uwierzytelniania systemu Windows. Na każde wymaganie muszę poprosić użytkownika, aby uwierzytelnił się po CO NAJMNIEJ minutę bezczynności. Wolałbym .NET natywny sposób wykonywania uwierzytelniania Windows, ale zainteresowany innymi sposobami ...Uwierzytelnianie Windows w .NET
Odpowiedz
do uwierzytelnienia użytkownika, można użyć metody ValidateCredential z PrincipalContext. Pamiętaj, aby dodać odniesienie System.DirectoryServices.AccountManagement
.
//If you are validating on a domain
PrincipalContext pcon = new PrincipalContext(ContextType.Domain);
if(pcon.ValidateCredential(txtUsername.Text,
txtPassword.Text,
ContextOptions.Negotiate))
{
//User is authenticated
}
Jeśli nie walidacji przeciwko domenie, sprawdź inne ContextType
. Możesz także użyć innej opcji do sprawdzenia poświadczeń (ContextOptions
).
Znaleziono następujące elementy i doszedłem do wniosku, że dodam je do skończenia. Nadal lubię odpowiedź Gabriela!
Private Declare Auto Function LogonUser Lib "advapi32.dll" (ByVal lpszUsername As String, ByVal lpszDomain As String, ByVal lpszPassword As String, ByVal dwLogonType As LogonType, ByVal dwLogonProvider As Integer, ByRef phToken As IntPtr) As Integer
Private Declare Auto Function CloseHandle Lib "kernel32.dll" (ByVal hObject As IntPtr) As Boolean
Public Enum LogonType As Integer
LOGON32_LOGON_INTERACTIVE = 2
LOGON32_LOGON_NETWORK = 3
LOGON32_LOGON_BATCH = 4
LOGON32_LOGON_SERVICE = 5
LOGON32_LOGON_UNLOCK = 7
LOGON32_LOGON_NETWORK_CLEARTEXT = 8
LOGON32_LOGON_NEW_CREDENTIALS = 9
End Enum
Public Function IsAuthenticated(ByVal Username As String, ByVal Password As String, Optional ByVal Domain As String = "") As Boolean
Dim Token As New IntPtr
LogonUser(Username, Domain, Password, LogonType.LOGON32_LOGON_INTERACTIVE, 0, Token)
CloseHandle(Token)
If Token.ToInt32 <> 0 Then Return True
End Function
Dlaczego używałbyś niezarządzanego kodu, kiedy możesz zrobić wszystko przy pomocy zarządzanego kodu? –
Ponieważ kod zarządzany nie jest dostępny w programie .NET Framework 2.0 – Denis
- 1. Uwierzytelnianie LDAP w Windows Phone
- 2. Ręczne uwierzytelnianie systemu Windows
- 3. Uwierzytelnianie NancyFx i Windows
- 4. Hybrydowe uwierzytelnianie Windows i uwierzytelnianie formularzy w ASP.NET MVC 4
- 5. Uwierzytelnianie proxy w bibliotece POCO Net C++
- 6. Uwierzytelnianie MVC WebAPI z Windows Forms
- 7. Uwierzytelnianie plików wykonywalnych systemu Windows
- 8. .Net SqlConnection, uwierzytelnianie serwera i przypinanie certyfikatu
- 9. Uwierzytelnianie Windows z Ruby on Rails
- 10. Uwierzytelnianie systemu Windows i Asp.Net Web API
- 11. Certyfikat klienta Windows 8 Phone Uwierzytelnianie HTTPS
- 12. Uwierzytelnianie systemu Windows z rdzeniem asp.net
- 13. Zintegrowane uwierzytelnianie systemu Windows dla wielu domen
- 14. IIS 7 - Uwierzytelnianie w IIS a uwierzytelnianie w web.config
- 15. Uwierzytelnianie HTTP NET klient przeciwko własnym Web Host API usługi Windows
- 16. Najlepszy sposób na uwierzytelnianie w API .NET WCF Web API
- 17. Jak zablokować system Windows (np. "Windows + L") w .NET?
- 18. .NET ListView i Windows 7
- 19. GitHub dla aplikacji .NET w systemie Windows?
- 20. Bezpłatna biblioteka kontrolek Windows .NET?
- 21. Uwierzytelnianie i uwierzytelnianie Vaadin
- 22. Uwierzytelnianie oparte na formularzach nie działa między aplikacją .Net 2.0 i .Net 4.0
- 23. Uwierzytelnianie Uwierzytelnianie na SharePoint na iPhonie
- 24. Uwierzytelnianie LDAP w ASP.Net MVC
- 25. Zastosuj uwierzytelnianie w etherpad lite
- 26. AngularJS z .NET Web API: uwierzytelnianie z AD
- 27. Hostowana usługa IIS usługi WCF + autoryzacja Windows w IIS + TransportCredentialOnly/Windows uwierzytelnianie basicHttpBinding
- 28. .Net Core JWT Uwierzytelnianie za pomocą niestandardowego klucza API Middleware
- 29. .net MVC Proste uwierzytelnianie przy użyciu bazy danych
- 30. Podstawowe uwierzytelnianie w ASP.NET Rdzenia
Chociaż brzmi to jak najlepszy sposób na zrobienie tego - po prostu okazało się, że te klasy nie są dostępne dla .NET 2.0. – Denis