断开连接时使用.Net对Active Directory进行身份验证

时间:2010-12-07 19:08:33

标签: .net authentication active-directory ldap

我有一个使用System.DirectoryServices和LDAP进行身份验证的.Net客户端WPF应用程序。在应用程序启动时,我想强制用户使用他们的域帐户重新进行身份验证(这是他们登录到Windows的方式)。我知道我可以使用以下命令在连接可用时执行身份验证。

DirectoryEntry entry = new DirectoryEntry("LDAP://" + domain,
            userName, password);

皱纹是应用程序有时被可能没有连接的远程用户使用。即使断开连接,Windows本身仍允许域用户登录。是否有类似的方法使用.Net Framework在断开连接的环境中验证用户?

2 个答案:

答案 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

断开连接时,这似乎是针对上次登录的本地缓存版本进行验证。