【发布时间】:2020-10-20 00:04:10
【问题描述】:
此代码获取我们组织中 AD 用户的属性,特别是运行网站的用户,服务帐户(因此无论用户运行网站,结果都是相同的):
DirectoryEntry entry = UserPrincipal.Current.GetUnderlyingObject() as DirectoryEntry;
if (entry != null)
{
foreach (string name in entry.Properties.PropertyNames)
{
Response.Write(entry.Properties[name].Value.ToString() + "</br>");
}
}
但是,我需要为运行 Web 浏览器的用户获取这些属性。我想我可以从 HttpContext 中获取这些,但找不到那个主体或 GetUnderlyingObject() 方法。
如何为登录到 Windows 计算机并运行 Web 浏览器的用户获取相同的 AD 属性列表?
【问题讨论】:
-
这真的不可用。您有时可以在 HTTP 标头中找到 似乎 是您想要的东西,但这只是默认设置。 用户可以很容易地覆盖它以显示他们想要的任何用户名。 如果您正在运行一个网络应用程序,而您的代码仅限于浏览器,那么您将需要某种实际的身份验证片。您可以使用 SAML/OAuth 来简化此操作,但您的用户仍需要登录。
-
@JoelCoehoorn 谢谢,乔尔。
-
这取决于您所说的“登录到 Windows 机器并运行 Web 浏览器的用户”是什么意思。如果您想在没有用户对您的网站进行身份验证的情况下这样做,那么 Joel 的评论是准确的 - 您不能这样做。但是,如果您在您的网站中使用 Windows 身份验证,并且您想引用当前登录到您网站的用户(可能不是登录到 Windows 的同一用户,但在大多数情况下可能是),那么 erastl 的答案就是去做。
标签: asp.net webforms active-directory