我正在编写一个在WinForms
客户端计算机上运行的程序(C#
,Win 7
)。它从用户获取凭据(用户ID,密码和子域名),并使用它们(通过Active Directory
)对程序远程连接的其他服务器进行身份验证。其他服务器所在的域与Win 7
客户端计算机所在的域不同。
使用NetworkCredential
,LdapDirectoryIdentifier
和LdapConnection
类,我可以使用不超过用户ID,密码和子域名的方式测试凭据(请参阅SO {的答案3}})。
例如,对于用户帐户ssmith@xyz.gov
,我只需提供ssmith
(用户ID),ssmith
的密码和xyz
({{1} }})。我不需要提供subdomain
(在这种情况下top-level domain name
)。
现在,我想以编程方式获取此用户帐户的gov
(在这种情况下为top-level domain name
)。我检查了gov
,NetworkCredential
和LdapDirectoryIdentifier
类的属性和方法。我查看了Why does Active Directory validate last password?中的其他课程。我没有看到以编程方式获取LdapConnection
的方法。
根据top-level domain name
,user id
和password
名称,如何获取用户帐户的subdomain
?
这是我的代码。给定ssmith@xyz.gov的用户帐户,我的调用看起来像这样(星号表示SecureString密码)
top-level domain name
这是我的方法代码。
bool result = ValidateCredentials("ssmith","******", "xyz");
答案 0 :(得分:1)
成功绑定后,域的完整DNS名称将位于LdapConnection
对象中:
var domain = connection.SessionOptions.DomainName;
在这种情况下,那将是“xyz.gov”。如果您只需要“gov”,那么您可以在最后一个点之后取出所有内容:
var tld = domain.Substring(domain.LastIndexOf('.') + 1);