欢迎使用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完成,有什么办法可以吗?感谢
答案 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,我想我得到了我想要的东西。