检查用户是否已使用System.DirectoryServices.AccountManagemen登录到域

时间:2010-11-09 05:05:07

标签: c# vb.net active-directory directoryservices

欢迎使用C#或VB.NET建议。

我有计算机加入域名。我正在编写一个桌面应用程序,要求输入用户名和密码来根据Active Directory对用户进行身份验证。 有时,用户在未加入域的计算机上使用此应用程序。

我正在使用.NET 3.5,System.DirectoryServices和System.DirectoryServices.AccountManagement。代码示例如何验证用户:

Private Function ValidateExternalUser(ByVal username As String, ByVal password As String) As Boolean
    Using context As PrincipalContext = New PrincipalContext(ContextType.Domain, "your_domain_here")
        Return context.ValidateCredentials(username, password, ContextOptions.Negotiate)
    End Using
End Function

' from http://stackoverflow.com/questions/30861/authenticating-domain-users-with-system-directoryservices

我想知道如何检查用户是否已在域计算机上登录,然后我不必要求他们再次登录该应用程序。

更新

如果无法使用System.DirectoryServices.AccountManagemen完成,有什么办法可以吗?感谢

3 个答案:

答案 0 :(得分:2)

如果计算机未连接到域,则System.Environment.DomainName属性将等于System.Environment.MachineName。

答案 1 :(得分:0)

我认为你不能用S.DS.AM命名空间做到这一点。知道用户是否登录到域将需要在运行时在域控制器上处理 - S.DS.AM关注静态信息(用户的属性),而不是真正的动态运行时属性(谁登录了)。

答案 2 :(得分:0)

我检查了System.Security.Principal.WindowsIdentity。GetCurrent.Name,它给了我

  

“域\用户名”

有了这些信息和System.Security.Principal.WindowsIdentity.GetCurrent.IsAuthenticated,我想我得到了我想要的东西。