获取客户端当前域控制器

本文关键字:域控 控制器 客户端 获取 | 更新日期: 2023-09-27 18:15:22

我正试图获得ASP.NET应用程序的客户端机器使用C#连接到的域控制器。

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

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

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

我读了其他几个问题,似乎都产生了IIS服务器域控制器。

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

获取客户端当前域控制器

关于Active Directory身份验证的几点:

  • 用户没有连接到域控制器。它们是根据Active Directory进行身份验证的,Active Directory是由一个或多个域控制器托管的分布式服务,它们在彼此之间复制信息。
  • 当用户通过web应用程序认证时,由IIS执行认证。发出401请求,用户的机器以令牌的形式提供凭据。然后IIS使用该令牌进行身份验证、授权和标识用户
  • 通过Windows身份验证的web应用程序用户在服务器端由WindowsIdentity对象表示。WindowsIdentity对象包含很少的属性,它们都不会暴露底层AD信息(除了域/用户名)
  • 客户端代码(又名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

按"'"分割,取第一个元素