Ověření identity libovolného uživatele ve Windows
Přidáno: 21.2.2008
Kategorie: VB.NET - Zabezpečení
Autor: Ondřej Linhart
Záměr tohoto ukázkového kódu je předvést, jak se dá ověřit identita libovolného uživatele ve Windows. Díky tomu můžete například povolit přístup do své aplikace pouze uživatelům, kteří se úspěšně autentizují pomocí svého uživatelského účtu ve Windows (pomocí jména a hesla kterým se přihlašují do systému). Funguje to jak na počítači bez domény, tak i na počítači v doméně. Tímto způsobem se dá velmi dobře a snadno integrovat zabezpečení definované v doméně přímo do vaší aplikace a nemusíte trávit čas vymýšlením vlastních autentizačních mechanismů.
Příklad použití:
Aplikace ve škole, která umožňuje všem členům školy (zaměstnanci, studenti) přistupovat k nějakým datům a tato aplikace bude umístěna na veřejně dostupném počítači. Nikdo, kdo nemá zřízený přihlašovací účet ve škole (v ActiveDirectory domény) se do této aplikace nedostane.
Imports System.Security.Principal
Imports System.Runtime.InteropServices
Public NotInheritable Class Security
Private Declare Auto Function LogonUser Lib "advapi32.dll" (
ByVal lpszUsername As String, _
ByVal lpszDomain As String, _
ByVal lpszPassword As String, _
ByVal dwLogonType As Integer, _
ByVal dwLogonProvider As Integer, _
ByRef phToken As IntPtr) As Boolean
Private Declare Auto Function CloseHandle Lib "kernel32.dll" (
ByVal handle As IntPtr) As Boolean
Private Const LOGON32_LOGON_INTERACTIVE As Integer = 2
Private Const LOGON32_PROVIDER_DEFAULT As Integer = 0
Private Sub New()
End Sub
Public Shared Function AuthenticateUser( _
ByVal domain As String, _
ByVal userName As String, _
ByVal password As String) As Boolean
Dim userToken As IntPtr = IntPtr.Zero
Dim returnValue As Boolean = LogonUser( _
userName, _
domain, _
password, _
LOGON32_LOGON_INTERACTIVE, _
LOGON32_PROVIDER_DEFAULT, _
userToken)
If Not returnValue Then
returnValue = CloseHandle(userToken)
Return False
Else
Dim identity As New WindowsIdentity(userToken)
returnValue = CloseHandle(userToken)
Return identity.IsAuthenticated
End If
End Function
End Class
Dim allowUserAccess As Boolean = Security.AuthenticateUser("Doma", "jan.novak", "heslo")