【问题标题】:How to get Windows user name when identity impersonate="true" in asp.net?在 asp.net 中身份 impersonate="true" 时如何获取 Windows 用户名?
【发布时间】:2010-11-19 00:27:50
【问题描述】:

我正在创建公司中的每个人都应该可以访问的 Intranet asp.net mvc 应用程序。我需要运行模拟的网站以进行数据库访问等,但我​​想知道每个用户是谁。

当我查看Page.User.Identity.Name 时,它是空白的。即使站点正在模拟运行,是否可以获得用户的 Windows 帐户名称?

编辑: 这是更多信息。我在 IIS 6 中运行了一个启用匿名访问的站点。该站点在有权访问数据库的系统帐户下运行(因为所有员工都无权访问数据库)。

我的 web.config 有 <authentication mode="Windows" /><identity impersonate="true"/>

我的目标是用户不必登录 - 他们登录到我们的网络这一事实(以及该站点不在外部 IP 上的事实)就足以进行身份​​验证。我只想知道用户是谁,以便跟踪他们所做的更改等。

【问题讨论】:

    标签: asp.net-mvc impersonation


    【解决方案1】:

    在您的应用程序中使用<authentication mode="Windows"/> 并在 IIS 中启用匿名访问,您将看到以下结果:

    System.Environment.UserName: Computer Name
    Page.User.Identity.Name: Blank
    System.Security.Principal.WindowsIdentity.GetCurrent().Name: Computer Name 
    

    在您的应用程序中使用<authentication mode="Windows"/>,并在 IIS 中禁用“匿名访问”并且仅使用“集成 Windows 身份验证”,您将看到以下结果:

    System.Environment.UserName: ASPNET (user account used to run ASP.NET service)
    Page.User.Identity.Name: Domain\ Windows Account Name 
    System.Security.Principal.WindowsIdentity.GetCurrent().Name: Computer Name\ASPNET
    

    在您的应用程序中使用<authentication mode="Windows"/><identity impersonate ="true"/>,并在 IIS 中禁用“匿名访问”并且仅使用“集成 Windows 身份验证”,您将看到以下结果:

    System.Environment.UserName: Windows Account Name 
    Page.User.Identity.Name: Domain\ Windows Account Name 
    System.Security.Principal.WindowsIdentity.GetCurrent().Name: Domain\ Windows Account Name
    

    【讨论】:

    • 这是我希望有最喜欢的答案的答案之一,比如最喜欢的问题
    • @BlackTigerX 有,您可以为出色的答案奖励赏金...这样做可以让您获得“利他主义者”徽章您手动奖励他人问题的第一个赏金
    • 为什么微软不在他们的文档中包含这样清晰、简短的解释?谢谢你的回答。
    • Thread.CurrentPrincipal.Identity.Name 怎么样?如果你也加上这个,我想它会更完整。
    【解决方案2】:

    试试这个

    System.Security.Principal.WindowsIdentity.GetCurrent().Name
    

    它应该返回一个带有用户登录名的字符串

    【讨论】:

    • 感谢 Gav - 我试过了,它显示了我的网站设置为在其下运行的帐户名称(有关更多信息,请参阅问题中的编辑)。
    • 认为您需要在 IIS 中禁用匿名访问,当他们访问该站点时假设他们已登录到域 IIS 将使用他们当前的登录名。上面的代码应该显示他们的用户 ID,而不是运行 IIS 的那个。
    【解决方案3】:

    我只是想发布我的修复,因为没有其他人对此发表任何评论。

    当我将网站发布到服务器时,我遇到了同样的问题,但不是在我的本地。所有的设置都是一样的。但是,在 IIS 中,“默认网站”从未关闭过。它正在运行并拦截流量,即使没有与之关联的站点。匿名身份验证在默认情况下已打开,但在我的网站在端口 80 下运行时已关闭。我的网站已关闭它似乎并不重要......因为默认已打开,它已为所有流量打开到 80 端口。

    禁用默认网页解决了这个问题。将端口更改为 8080 也可以。

    我希望这对某人有所帮助。

    【讨论】:

      【解决方案4】:

      除非这个功能在 MVC 框架下发生了改变,而且我不认为它已经改变,否则 Page.User.Identity.Name 应该仍然可以工作。听起来您的网站设置为允许匿名身份验证。如果是这样,请尝试禁用它。

      【讨论】:

      • 谢谢瑞恩。我在问题中添加了更多细节,但基本上我需要匿名身份验证。
      • 鉴于附加信息,您需要<identity impersonate="false"/ >。您希望 Web 应用程序在 IIS 提供的标识下运行。 impersonate="false" 确保是这种情况。您还希望打开集成身份验证并禁用匿名身份验证。这确保 Page.User.Identity 将是查看页面的用户的身份。如果服务器和用户在同一个域中,则它们不必实际提供凭据。
      • 很抱歉这么长时间才回复。我已经有一段时间没有机会参加这里了。
      猜你喜欢
      • 2013-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-09
      • 2020-03-19
      相关资源
      最近更新 更多