User.Identity.Name为null?

时间:2015-09-02 20:06:40

标签: asp.net asp.net-mvc asp.net-mvc-5 asp.net-identity-2

我使用visual studio 2015在我的办公室PC上创建了一个简单的web api项目,Windows登录公司Domain(AD)。我更改了web.config文件以进行集成身份验证 - <system.web><authentication mode="Windows" />。 url http://localhost:23151/api/Model1从数据库返回有效的xml数据。

我在IIS Express(开发服务器)设置的项目属性中将匿名身份验证更改为已禁用,并将Windows身份验证更改为已启用。

我在public IQuerybal<Model1> GetModel1()设置了一个断点并检查User.Identity.Name的值并返回null

更新 奇怪的是我在另一台PC上创建了一个新项目(仍然在Visual Studio 2015中),我可以从属性User.Identity.Name获得我的Windows登录。

更新2: 我试图将项目文件复制到新PC,它仍然有同样的问题。所以它应该是项目中的一些设置。很奇怪。

2 个答案:

答案 0 :(得分:7)

在您的问题中没有太多可以处理的问题,但我最好的猜测是您忽略了授权控制器操作。您需要将[Authorize]属性添加到实际控制器类(以保护其中的所有操作)或您在此处使用的单个操作。

如果您需要允许匿名访问相同的操作,您还可以添加[AllowAnonymous]属性,但如果您至少没有[Authorize],则不会添加任何用户信息已填充。

答案 1 :(得分:0)

我还遇到User.Identity.Name为null的问题,我的环境是AspNetCore MVC。事实证明,在进行某些配置更改后,Visual Studio更改了我的web.config,并将forwardWindowsAuthToken修改为“ false”。填充User.Identity.Name必须为真

<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="true" />