【问题标题】:active directory c# website hosted in IIS在 IIS 中托管的活动目录 c# 网站
【发布时间】:2020-07-09 21:49:39
【问题描述】:

我在使用 Active Directory 的网络上。我编写了一个 MVC c# Web 应用程序,以使用标题中的网站显示此人的姓名。代码是

 PrincipalContext ctx = new PrincipalContext(ContextType.Domain);
 UserPrincipal user = UserPrincipal.Current;
 Debug.Writeline(user.DisplayName); //but when i host it in a local server (IIS) this keeps outputing my name

每当我使用别人的计算机访问该网站时,我仍然会在标题中看到我的名字。

我该如何解决这个问题,以便每当我在其他人的计算机上时,我都会在标题中看到他们的名字?

【问题讨论】:

  • 我亲自到个人计算机并访问网络上的 url
  • 你不能。您曾经能够做到这一点,但它只能在 Internet Explorer 中工作。 Web 服务器不一定知道有关客户端的任何信息。您会在请求中发现一些似乎的 HTTP 标头可以告诉您要查找的内容,但实际上很容易伪造这些标头。
  • 另外,如果你在那里看到你的名字,那么你设置的 IIS 应用程序非常错误。您应该会看到类似 ASPNET_USERNetwork Service 的内容,或者可能是为此目的创建的专用服务帐户...但绝对不是您的日常用户帐户。请记住:您的所有代码都在 Web 服务器上运行,作为该过程的一部分并在该上下文中。
  • 在你的控制器类中,你应该从Controller.Userdocs.microsoft.com/cs-cz/dotnet/api/…访问登录用户信息。

标签: c# iis active-directory


【解决方案1】:

UserPrincipal user = UserPrincipal.Current; 将向用户显示正在运行 Web 应用程序。当您从 ActiveDirectory 查找用户帐户时使用UserPrincipal(使用PrincipalContext)。

您应该使用HttpContext.Current.User.Identity.Name 来查找正在访问该站点的用户,但请检查以确保HttpContext.Current 不为空。

Documentation on HttpContext class

【讨论】:

  • 当我在本地尝试它时它可以工作,但是一旦我在服务器中这样做它就会给我一个空字符串
  • 您确定服务器上的身份验证设置正确吗?
  • 我很确定,但是我需要注意哪些事情,但我相信它设置正确
  • HttpContext.Current 可以为空。
  • 是的@LexLi,它可以为空。但是您不能使用 UserPrincipal 来查找访问该站点的用户身份
猜你喜欢
  • 1970-01-01
  • 2021-07-14
  • 1970-01-01
  • 2010-12-05
  • 1970-01-01
  • 2019-07-20
  • 2014-02-16
  • 2017-05-06
  • 1970-01-01
相关资源
最近更新 更多