我使用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,它仍然有同样的问题。所以它应该是项目中的一些设置。很奇怪。
答案 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" />