【问题标题】:Blazor Wasm Hosted. .Net 6.0. Problem AAD AuthenticationBlazor Wasm 托管。 .Net 6.0。问题 AAD 身份验证
【发布时间】:2021-11-19 11:33:32
【问题描述】:

当我尝试在 Blazor WebAssembly Hosted 和 .Net 6.0 中使用 AAD 进行身份验证时,在身份验证后,尝试访问 /WheaterForecast 控制器时出现以下错误:

WWW-Authenticate: Bearer error="invalid_token", error_description="观众 'api://11111111-1111-1111-1111-111111111111' 无效"

在 AAD 中,我有以下内容:
服务器应用程序
客户编号:11111111-1111-1111-1111-111111111111
租户编号:22222222-2222-2222-2222-222222222222
URI ID 应用程序:api://11111111-1111-1111-1111-111111111111

客户端应用程序
客户编号:33333333-3333-3333-3333-333333333333

那么,我的服务器应用配置是:

"AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "Domain": "xxxxxx.emea.microsoftonline.com",
    "TenantId": "22222222-2222-2222-2222-222222222222",
    "ClientId": "api://11111111-1111-1111-1111-111111111111",
    "CallbackPath": "/signin-oidc"
  }

在program.cs中...

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApi(builder.Configuration.GetSection("AzureAd"));
...
...
app.UseAuthentication();
app.UseAuthorization();

我的客户端应用程序配置...

"AzureAd": {
"Authority": "https://login.microsoftonline.com/fff3a238-b26a-4351-8a2a-0b19dc72e02e",
"ClientId": "33333333-3333-3333-3333-333333333333",
"ValidateAuthority": true

}

来自客户端应用程序的 Program.cs...

builder.Services.AddHttpClient("ReservasSalasAuth.ServerAPI", client =>
 client.BaseAddress = new Uri(builder.HostEnvironment.BaseAddress))
.AddHttpMessageHandler<BaseAddressAuthorizationMessageHandler>();

builder.Services.AddScoped(sp => sp.GetRequiredService<IHttpClientFactory>().CreateClient("{MyNamespace}.ServerAPI"));
 
builder.Services.AddMsalAuthentication(options =>
{
builder.Configuration.Bind("AzureAd", options.ProviderOptions.Authentication);
options.ProviderOptions.DefaultAccessTokenScopes.Add("api://11111111-1111-1111-1111-111111111111/API.Read");
});

最后一点味道不好几乎总是我登录,弹出窗口一直存在,直到我在 Edge 中按 F12 ......然后继续并完成弹出窗口。

提前致谢!!

【问题讨论】:

    标签: azure-active-directory blazor-webassembly .net-6.0


    【解决方案1】:

    Audience 值是客户端 ID 或应用 ID URI,根据应用在应用注册中的“公开 api”刀片上设置。

    请检查可能的解决方法:

    1. http://jwt.io 中检查您的 jwt 令牌。如果发行人即; “iss”:“https://login.microsoftonline.com/XXXXXX/v2.0”,具有 v2 enpoint。检查您的 azure 广告应用的清单:以下值可能为 null 或一,应为二:“accessTokenAcceptedVersion” : 2, 检查当前应用注册是否相同,如果需要修改并尝试登录。

    (或)

    1. 首先尝试通过在服务器 api 设置中删除客户端 ID 中的 api:// 来登录。如果没有,请同时删除 options.ProviderOptions.DefaultAccessTokenScopes 的 api:// 前缀。添加到客户端配置服务中。

    (或)

    1. 在客户端应用程序中,对于隐式授权,选中访问令牌和 ID 令牌的复选框。 确保在门户中添加api permissions 与代码配置相同,并将其添加到范围并授予权限)。 确保您使用工作或学校帐户登录。

    请检查Secure an ASP.NET Core Blazor WebAssembly hosted app with Azure Active Directory | Microsoft Docsaccess token scopes 下的内容,并检查是否存在double api:// 方案并尝试添加ap:// 或删除如果作用域需要。

    【讨论】:

    • 非常感谢。最后,它是使它工作的混合体。就我而言,我需要做出您的第一个和第二个选择。第二种,只在服务端App中。
    • 我很高兴它有帮助 :) 感谢您的更新。
    猜你喜欢
    • 2021-12-27
    • 2021-04-12
    • 2021-11-05
    • 2021-06-16
    • 2021-07-24
    • 2021-03-01
    • 2021-03-02
    • 2021-04-30
    • 1970-01-01
    相关资源
    最近更新 更多