获取客户端当前域控制器

时间:2015-09-30 13:08:45

标签: c# asp.net domaincontroller

我尝试使用ASP.NET获取C#应用程序的客户端计算机连接到的域控制器。

该应用程序是一个永远不会暴露给Internet的Intranet应用程序,每个使用该应用程序的用户都必须通过Windows进行身份验证。因此,这意味着用户将始终连接到公司网络中的域控制器。

我已尝试使用以下代码,但它返回了IIS服务器所连接的域控制器:

using System.DirectoryServices;

public static string GetDC()
{
    DirectoryEntry Entry = new DirectoryEntry("LDAP://rootDSE");
    return Entry.Properties["dnsHostname"].Value.ToString();
}

我已经阅读了其他几个关于这个问题的问题,这些问题似乎都产生了IIS服务器域控制器。

我的问题是,是否可以获取客户端连接的域控制器,如果是,如何获取?

1 个答案:

答案 0 :(得分:1)

有关Active Directory身份验证的一些事项:

  • 用户未连接到域控制器。它们针对Active Directory进行身份验证,Active Directory是由一个或多个域控制器托管的分布式服务,这些域控制器可以相互复制信息。
  • 当用户通过Web应用程序进行身份验证时,IIS将执行身份验证。发出401质询,用户的机器以令牌的形式提供凭证。然后,IIS使用该令牌对用户进行身份验证,授权和识别
  • 由Windows身份验证进行身份验证的Web应用程序用户由WindowsIdentity对象在服务器上表示。 WindowsIdentity对象包含很少的属性,这些属性都不会公开基础AD信息(域/用户名除外)
  • 客户端代码(AKA javascript)无法访问您计算机上的敏感AD信息。如果确实如此,那将是非常糟糕的。

如果您想详细了解身份验证在AD中的确切运作方式,请查看此处:https://technet.microsoft.com/en-us/library/cc780332(v=ws.10).aspx

现在,如果用户位于不同的域中,那么您可以从用户的用户名获取域名并使用该域名执行AD查找。

string userNameWithDomain = HttpContext.Current.User.Identity.Name; // returns SOMEDOMAIN\USERNAME

你拆分'\'并取第一个元素。