【问题标题】:Windows Authentication using Blazor with .Net Core WebApi使用带有 .Net Core WebApi 的 Blazor 进行 Windows 身份验证
【发布时间】:2021-04-20 16:23:47
【问题描述】:

我的任务是开发 Blazor Webassembly 应用程序。此应用仅在公司网络内使用,出于安全原因,我们希望使用现有的 AD 和 NTLM 身份验证。

到目前为止,我已经在 IIS 中配置并运行了一个最小的 Blazor 应用程序。它配置为使用 Windows 身份验证,并且到目前为止有效。当我在浏览器中打开应用程序时,系统会询问我的凭据。 该应用程序还应该与同样受 Windows 身份验证保护的 .net 核心 webapi 进行通信。这个 webapi 安全也可以正常工作。当我在浏览器中打开它的 URL 时,系统会要求我提供我的凭据,然后页面会按应有的方式加载。

现在的问题:当我使用 HttpClient.GetAsync 从我的 Blazor 应用程序调用相同的 url(在浏览器中有效)时,我收到“401:未授权”错误。即使应用程序本身加载了相同的身份验证。有什么我必须做的吗? MSDN 文档非常庞大,我找不到解决方案。

在我添加的 ConfigureServices() 中的 WebApi Startup.cs 中

services.AddAuthentication(IISDefaults.AuthenticationScheme);
services.AddAuthorization();

在Configure()中

app.UseCors(x => x.AllowAnyMethod().AllowAnyHeader().SetIsOriginAllowed(origin => true).AllowCredentials());
app.UseAuthentication();
app.UseAuthorization();

PS: Blazor 应用程序使用 .NET Core 3.1 WebApi 使用 .NET 5.0

【问题讨论】:

  • 请求中是否有认证头?
  • 根据 Firefox,标头中没有任何类似于身份验证的内容。这有帮助。但是我如何以(正确的?)方式到达那里?

标签: asp.net-core authentication asp.net-web-api .net-core blazor


【解决方案1】:

当通过IHttpClientFactory 注入HttpClients 时,您可以像这样注册一个使用windows auth 的命名HttpClient:

services.AddHttpClient("Excit", x =>
{
    //other settings
}).ConfigurePrimaryHttpMessageHandler(() =>
{
    return new HttpClientHandler
    {
        UseDefaultCredentials = true
    };
});

【讨论】:

    【解决方案2】:

    我建议检查Blazor WebAssembly additional security scenarios(所有示例都在那里)

    要授权您的请求,您可以将 HttpClient 与 BaseAddressAuthorizationMessageHandler 一起使用:

    builder.Services.AddHttpClient("ServerAPI", 
        client => client.BaseAddress = new Uri("https://www.example.com/base"))
    .AddHttpMessageHandler<BaseAddressAuthorizationMessageHandler>();
    

    BaseAddressAuthorizationMessageHandler 将自动将 Authorize 标头添加到所有传出请求。

    注意:这仅适用于 Blazor Wasm,不适用于 Server。

    【讨论】:

    • 我已将 Blazor WASM 项目升级到 5.0。现在我可以按照您的描述使用 AddHttpClient 了。但是当我尝试从 IHttpClientFactory 获取 HttpClient 时,我在我的页面中注入了以下错误“没有为类型 'Microsoft.AspNetCore.Components.WebAssembly.Authentication.BaseAddressAuthorizationMessageHandler' 注册的服务。”
    • 当我添加 builder.Services.AddApiAuthorization();错误消失了。但是 Http Header 仍然没有任何认证信息。会不会是因为 WebApi 和 WASM 不在同一个基地址上?
    猜你喜欢
    • 2018-01-07
    • 2020-02-03
    • 1970-01-01
    • 2020-11-05
    • 2020-08-06
    • 2012-09-12
    • 2020-06-05
    • 2018-08-03
    • 2018-01-28
    相关资源
    最近更新 更多