【问题标题】:Windows Authentication support in ASP.NET 5 beta 8ASP.NET 5 beta 8 中的 Windows 身份验证支持
【发布时间】:2015-10-18 22:59:27
【问题描述】:

我有一个 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 announcement 中所述,托管模型已更改,因此 IIS 现在将请求传递给 Kestrel。 Servers page 没有表明 Kestrel 支持 Windows 身份验证。让 Windows 身份验证在 beta 8 中工作有什么技巧吗?

【问题讨论】:

    标签: c# asp.net asp.net-mvc asp.net-core asp.net-core-mvc


    【解决方案1】:

    这似乎是known bug in the Visual Studio debugging tooling when using IIS Express。在修复之前,我发现的唯一解决方法是通过运行 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(或 Web,在 Kestrel 下不支持 NTLM)进行调试,您应该能够在解决 IIS Express 工具错误的同时继续工作。我相信,您需要将 Microsoft.AspNet.Server.WebListener 添加到您的 project.json 依赖项中才能启用 WebListener。

    我发现,如果我直接在 project.json 中更改“web”命令,Visual Studio 会非常积极地将其更改回来,因此添加一个单独的命令 as recommended by the Microsoft team 似乎可以让一切顺利。

    【讨论】:

    • 这似乎是目前最好的答案,因为它允许 Windows 身份验证实际工作。谢谢!
    • 没问题@Bill - 我需要它能够在他们修复工具错误的同时继续工作,不想因为这个而不得不将我们的代码移回 beta 7!
    • @Bill 我刚刚稍微更新了答案以使用单独的命令,因为今天早上,我看到 Visual Studio 再次进入并将我的“web”命令改回 Kestrel ......有点急于把它放回去!
    【解决方案2】:

    有一个已知的工具错误会阻止您禁用“匿名身份验证”:https://github.com/aspnet/Hosting/issues/419

    重新启用它,您看到的问题应该会消失。

    确保您还在 Configure 方法的早期添加了 app.UseIISPlatformHandler();:需要它来解析与 IIS 流动的令牌相对应的 Windows 身份。

    【讨论】:

    • 正如我在问题中提到的,在启用匿名(并启用 Windows)后,对 Web API 的授权仍然失败。这确实允许 F5 启动项目,但没有任何东西可以通过 Web API 进行身份验证。但是,是的,我们正在讨论这个问题。 :)
    【解决方案3】:

    同样在 web.config 你应该设置 forwardWindowsAuthToken="true" 例如:

     <httpPlatform processPath="%DNX_PATH%" arguments="%DNX_ARGS%" forwardWindowsAuthToken="true" startupTimeLimit="3600" />
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多