根据用户ID,密码和子域名,如何获取用户帐户的顶级域名?

时间:2018-05-03 15:31:02

标签: c# winforms active-directory ldap domain-name

我正在编写一个在WinForms客户端计算机上运行的程序(C#Win 7)。它从用户获取凭据(用户ID,密码和子域名),并使用它们(通过Active Directory)对程序远程连接的其他服务器进行身份验证。其他服务器所在的域与Win 7客户端计算机所在的域不同。

使用NetworkCredentialLdapDirectoryIdentifierLdapConnection类,我可以使用不超过用户ID,密码和子域名的方式测试凭据(请参阅SO {的答案3}})。

例如,对于用户帐户ssmith@xyz.gov,我只需提供ssmith(用户ID),ssmith的密码和xyz({{1} }})。我不需要提供subdomain(在这种情况下top-level domain name)。

现在,我想以编程方式获取此用户帐户的gov(在这种情况下为top-level domain name)。我检查了govNetworkCredentialLdapDirectoryIdentifier类的属性和方法。我查看了Why does Active Directory validate last password?中的其他课程。我没有看到以编程方式获取LdapConnection的方法。

根据top-level domain nameuser idpassword名称,如何获取用户帐户的subdomain

这是我的代码。给定ssmith@xyz.gov的用户帐户,我的调用看起来像这样(星号表示SecureString密码)

top-level domain name

这是我的方法代码。

bool result = ValidateCredentials("ssmith","******", "xyz");

1 个答案:

答案 0 :(得分:1)

成功绑定后,域的完整DNS名称将位于LdapConnection对象中:

var domain = connection.SessionOptions.DomainName;

在这种情况下,那将是“xyz.gov”。如果您只需要“gov”,那么您可以在最后一个点之后取出所有内容:

var tld = domain.Substring(domain.LastIndexOf('.') + 1);