[英]Windows Authentication support in ASP.NET 5 beta 8
我有一个ASP.NET 5 MVC 6 Web API项目。 大多数API端点都具有[Authorize]属性,并且IIS和Visual Studio中的项目属性均启用了Windows身份验证。 所有这些在Beta 7中都可以正常工作。
但是,在beta 8中,此方法无效。 使用完全干净的项目可以很容易地重现此内容:
结果:
尝试确定托管您的应用程序的DNX进程的进程ID时发生错误。
结果:
这次启动该项目,但是Web API返回500。在“输出”窗口中注意:
Microsoft.AspNet.Mvc.Controllers.ControllerActionInvoker:警告:筛选器“ Microsoft.AspNet.Mvc.Filters.AuthorizeFilter”的请求授权失败。
发布到IIS时,该项目也不起作用。
如beta 8 公告中所述,托管模型已更改,以使IIS现在将请求传递给Kestrel。 “ 服务器”页面没有任何迹象表明Kestrel支持Windows身份验证。 使Windows身份验证在beta 8中工作是否有一些技巧?
使用IIS Express时,这似乎是Visual Studio调试工具中的已知错误 。 在修复此问题之前,我发现的唯一解决方法是通过WebListener而不是IIS Express进行调试。 要进行设置,请在Startup.cs的Configure方法中添加:
// If we're self-hosting, enable integrated authentication (if we're using
// IIS, this will be done at the IIS configuration level).
var listener = app.ServerFeatures.Get<WebListener>();
if (listener != null)
{
listener.AuthenticationManager.AuthenticationSchemes =
AuthenticationSchemes.NTLM;
}
然后在project.json中添加一个weblistener cmd,如下所示:
"commands": {
"weblistener": "Microsoft.AspNet.Server.WebListener --config hosting.ini",
"web": "Microsoft.AspNet.Server.Kestrel"
},
...或类似。 然后,如果使用weblistener配置文件而不是IIS Express(或Kestrel不支持NTLM的Web)进行调试,则应该可以在解决IIS Express工具错误的情况下继续工作。 我相信,您需要将Microsoft.AspNet.Server.WebListener
添加到project.json依赖项才能启用WebListener。
我发现,如果直接在project.json中更改了“ web”命令,Visual Studio会非常主动地将其更改回原来的位置,因此,按照Microsoft团队的建议添加单独的命令似乎会让一切都变得愉快。
有一个已知的工具错误,可防止您禁用“匿名身份验证”: https : //github.com/aspnet/Hosting/issues/419 。
重新启用它,您看到的问题将消失。
确保您还添加了app.UseIISPlatformHandler();
在您的Configure
方法的早期:需要解析与IIS传递的令牌相对应的Windows身份。
同样在web.config中,您应该设置forwardWindowsAuthToken =“ true”,例如:
<httpPlatform processPath="%DNX_PATH%" arguments="%DNX_ARGS%" forwardWindowsAuthToken="true" startupTimeLimit="3600" />
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.