HttpContext.Current.User.Identity.Name每次都为空

时间:2016-06-13 08:46:07

标签: c# asp.net authentication

这可能是重复问题,但我没有从其他帖子中找到任何解决方案。

我正在使用Windows身份验证,当我在本地系统上构建应用程序时工作正常但是当我在IIS上部署应用程序时HttpContext.Current.User.Identity.Name返回null。除了身份验证设置上的Windows身份验证外,我已禁用eveything。

var strUserName = HttpContext.Current.User.Identity.Name == "" ? System.Security.Principal.WindowsIdentity.GetCurrent().Name : HttpContext.Current.User.Identity.Name;

我的strUserName为null。

<authentication mode="Windows">
</authentication>

<identity impersonate="true"/>

我尝试划分线并编写代码来检查究竟是什么......#/ p>

 HttpContext.Current.User.Identity.Name is returning null
 System.Security.Principal.WindowsIdentity.GetCurrent().Name is returning NT AUTHORITY\IUSR when impersonate is true
 System.Security.Principal.WindowsIdentity.GetCurrent().Name is returning IIS APPPOOL\ApplicationPoolName when impersonate is false

以下几个链接我已经检查过

HttpContext.Current.User.Identity.Name is empty using IIS Express but not Visual Studio Development Server

User.Identity.Name with windows authentication

2 个答案:

答案 0 :(得分:1)

在Visual Studio解决方案资源管理器中 - 单击Web应用程序项目 - &gt;在底部选择“属性”选项卡。确保您具有以下设置:

  1. 匿名身份验证|的禁用
  2. Windows身份验证|的启用
  3. 像这样更改您的Web.config:

      <system.web>
        <authentication mode="Windows"/>
        <compilation debug="true" targetFramework="4.5"/>
        <httpRuntime/>
        <pages controlRenderingCompatibilityVersion="4.0"/>
      </system.web>
      <system.webServer>
        <modules>
          <remove name="FormsAuthentication"/>
        </modules>
      </system.webServer>
    

    现在尝试访问当前的Windows用户:

    string user = System.Web.HttpContext.Current.User.Identity.Name;
    

答案 1 :(得分:0)

在web.config中尝试这些设置

<system.web>
    <compilation debug="true" targetFramework="4.5.2" />
    <httpRuntime targetFramework="4.5.2" />
    <authentication mode="Windows" />
    <authorization>
      <deny users="?" />
    </authorization>
</system.web>
<system.webServer> 
</system.webServer>