我有一个使用System.DirectoryServices和LDAP进行身份验证的.Net客户端WPF应用程序。在应用程序启动时,我想强制用户使用他们的域帐户重新进行身份验证(这是他们登录到Windows的方式)。我知道我可以使用以下命令在连接可用时执行身份验证。
DirectoryEntry entry = new DirectoryEntry("LDAP://" + domain,
userName, password);
皱纹是应用程序有时被可能没有连接的远程用户使用。即使断开连接,Windows本身仍允许域用户登录。是否有类似的方法使用.Net Framework在断开连接的环境中验证用户?
答案 0 :(得分:2)
如果没有连接,则没有连接。 Windows维护该用户上次登录的缓存版本(意味着新用户无法登录到与该域无连接的计算机)。您可以使用本地系统身份验证来确定正在使用系统的用户,并根据该身份确定本地缓存权限。这些方法仍然位于System.DirectoryServices
命名空间内,解析查询的位置会发生变化(我不相信它会在本地接受LDAP查询)。
修改强>
您还可以在System.Security
/ System.Security.Permissions
命名空间中找到一些可以满足这些需求的类。
答案 1 :(得分:2)
相信我找到了一种使用advapi32.dll的LogonUser功能的方法。
Dim tokenHandle As New IntPtr(0)
Const LOGON32_PROVIDER_DEFAULT As Integer = 0
Const LOGON32_LOGON_INTERACTIVE As Integer = 2
tokenHandle = IntPtr.Zero
Dim returnValue As Boolean = LogonUser("<username>", "<domain>", "<password>", LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, tokenHandle)
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
断开连接时,这似乎是针对上次登录的本地缓存版本进行验证。