HttpContext.Current.User.Identity.Name 每次都是空的
Posted
技术标签:
【中文标题】HttpContext.Current.User.Identity.Name 每次都是空的【英文标题】:HttpContext.Current.User.Identity.Name is empty every time 【发布时间】:2016-06-13 08:46:06 【问题描述】:这可能是重复问题,但我没有从其他帖子中找到任何解决方案。
我正在使用 Windows 身份验证,当我在本地系统上构建应用程序时,它工作正常,但是当我在 IIS 上部署应用程序时,HttpContext.Current.User.Identity.Name 返回 null。我在身份验证设置上禁用了除 Windows 身份验证之外的所有内容。
var strUserName = HttpContext.Current.User.Identity.Name == "" ? System.Security.Principal.WindowsIdentity.GetCurrent().Name : HttpContext.Current.User.Identity.Name;
我的 strUserName 为空。
<authentication mode="Windows">
</authentication>
<identity impersonate="true"/>
我尝试分割线并编写代码来检查究竟是什么返回...
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
【问题讨论】:
我想向您推荐edit 您的问题并添加您发现的其他类似问题,并尽量避免将您的问题标记为重复。 我相信第二个<authentication>
标签会覆盖上面示例中的第一个标签,因此mode=Windows
不会被拾取。可以尝试合并两个配置项吗?
你指的是服务/WCF吗?
【参考方案1】:
在 Visual Studio 解决方案资源管理器中 - 单击 Web 应用程序项目 -> 在底部选择“属性”选项卡。确保您具有以下设置:
-
匿名身份验证 | 已禁用
Windows 身份验证 | 启用
像这样更改您的 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;
【讨论】:
设置与您建议的相同,当我清理浏览器历史记录并将匿名身份验证再次禁用时,它开始显示用户名密码窗口,但它不接受凭据,我可以远程具有相同的凭据。它不应该直接显示任何弹出窗口,它必须检查用户并重定向到默认屏幕。 你在使用 MVC 吗? 当我尝试添加在 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>
【讨论】:
以上是关于HttpContext.Current.User.Identity.Name 每次都是空的的主要内容,如果未能解决你的问题,请参考以下文章
HttpContext.Current.User.Identity.Name 为空
HttpContext.Current.User.Identity.Name 每次都是空的
将 HttpContext.Current.User 与异步等待一起使用的正确方法
HttpContext.Current.User.Identity.Name为Empty
ASP.NET C#中怎么让 httpcontext.current.user.identity.name 获取为自定义的值
WindowsIdentity winId = (WindowsIdentity)HttpContext.Current.User.Identity;如何使这个演员工作;目前它失败了