-1

我正在尝试获取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 服务器域控制器。

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

4

1 回答 1

1

关于 Active Directory 身份验证的几件事:

  • 用户不连接到域控制器。它们针对 Active Directory 进行身份验证,这是一种由一个或多个域控制器托管的分布式服务,这些域控制器在彼此之间复制信息
  • 当用户通过 Web 应用程序进行身份验证时,执行身份验证的是 IIS。发出 401 质询,用户的机器以令牌的形式提供凭证。然后 IIS 使用该令牌对用户进行身份验证、授权和识别
  • 通过 Windows 身份验证验证的 Web 应用程序用户在服务器上由 WindowsIdentity 对象表示。WindowsIdentity 对象包含很少的属性,这些属性都不会暴露底层 AD 信息(域/用户名除外)
  • 客户端代码(AKA javascript)将无法访问您机器上的敏感广告信息。如果真的发生了,那就太糟糕了。

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

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

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

您在 '\' 上拆分并获取第一个元素。

于 2015-09-30T13:26:27.053 回答