【问题标题】:pass Windows user name to website将 Windows 用户名传递给网站
【发布时间】:2016-05-20 00:15:28
【问题描述】:

我有一个 .NET 站点,它评估用户域帐户并从 Active Directory 中获取一些详细信息。
这在通过 Visual Studio 在本地运行时很好,但是在部署时,启用 Windows 身份验证(未启用其他身份验证类型)我似乎只能获取运行应用程序池的用户的名称。
是否有特定的方法来获取实际登录用户而不是应用程序池用户? 目前正在获取这样的用户名:

string _user = System.Security.Principal.WindowsIdentity.GetCurrent().Name.Remove(0, 8);

也试过

Page.User.Identity.Name;

【问题讨论】:

  • 部署它的服务器是域的一部分吗?
  • 应用程序配置了 Windows 身份验证并且服务器在域中。
  • @DarkW1nter,你能显示你用来获取用户的代码行吗?你的页面也有任何登录屏幕吗..?
  • 让它使用这个(首先从用户名中删除域) string _user = System.Security.Principal.WindowsIdentity.GetCurrent().Name.Remove(0, 8);也试过 Page.User.Identity.Name;

标签: c# iis-7 windows-authentication application-pool


【解决方案1】:

有时您需要尝试几种不同的方法来检索 Active Directory 信息。以下是其他帖子中出现的几种方式:

string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
string userName = Environment.UserName;
string userName = HttpContext.Current.User.Identity

只需添加这些,调试并查看它们是否也返回 iis 用户名。

这里有两个不同的 windows 用户 - 第一个是您的应用程序用户,第二个是您的 ASP.NET 应用程序(从 IIS 角度来看的应用程序池)正在运行的用户(或 windows 帐户)。 WindowsIdentity.GetCurrent 通常会返回此引用。

要获得使用该应用程序的实际 Windows 用户,您必须强制执行身份验证。为此,您可以在 IIS 中为所述网站启用集成身份验证(Windows 身份验证)。还要修改您的 ASP.NET 配置以使用 Windows 身份验证。现在您可以使用 HttpContext.Current.User.Identity 来获取实际用户。

<authorization>
  <deny users="?" />
  <allow users="*" />
</authorization>
<authentication mode="Windows" />

【讨论】:

  • 是否按照您所说的进行配置,使用了 HttpContext 但在从服务器浏览时仍然获取应用程序池用户,但是在远程浏览时无法进行身份验证,所以我怀疑这是我需要获得的权限服务器家伙看。谢谢
  • 您可以尝试禁用匿名身份验证。见上文
  • 我只启用了 Windows 身份验证,并允许所有用户。浏览凭据对话框时,不应该出现,因为我的用户有权访问服务器。
  • 您应该添加禁用“?”部分查看是否由于某种原因没有强制进行身份验证。有很多其他帖子有同样的问题。
  • 好的,接受你的回答,因为你给了我很多工作要做 - 再次感谢
猜你喜欢
  • 2014-02-25
  • 2013-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-16
  • 2017-12-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多