繁体   English   中英

ASP.NET 5 beta 8中的Windows身份验证支持

[英]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中,此方法无效。 使用完全干净的项目可以很容易地重现此内容:

  1. 使用ASP.NET 5 Web API模板创建一个新项目。
  2. 获取项目(不是解决方案)上的属性,转到“调试”选项卡,启用Windows身份验证并禁用“匿名”。 保存更改。
  3. 点击F5,让它尝试运行该项目。

结果:

尝试确定托管您的应用程序的DNX进程的进程ID时发生错误。

  1. 现在返回项目属性并启用匿名。 还要启用Windows。 保存更改。
  2. 转到您的控制器并添加[Authorize]属性。
  3. 再按一次F5。

结果:

这次启动该项目,但是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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM