You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Blazor WASM调用带[Authorize]的后端接口返回401问题排查

问题分析与解决方案

1. 后端JwtBearer认证缺失Audience配置

Azure AD颁发的JWT令牌包含aud(受众)声明,后端必须验证该声明确保令牌是颁发给自己的。你注释掉Audience配置会导致后端无法完成这一验证,直接拒绝请求。

  • 恢复并配置Audience,值为后端应用注册的应用ID URI(格式通常为api://{后端应用客户端ID})
  • 示例代码:
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    {
        options.Authority = "https://login.microsoftonline.com/{租户ID}";
        options.Audience = "api://{后端应用客户端ID}"; // 必须配置,对应后端应用的ID URI
    });

2. 前端AccessToken作用域错误

你当前配置的默认作用域是https://graph.microsoft.com/User.Read,这个令牌的受众是微软Graph API,而非你的后端API,后端自然会判定令牌无效。

  • 修改前端Msal配置,添加后端API的专属作用域(格式通常为api://{后端应用客户端ID}/{自定义作用域名})
  • 示例配置:
builder.Services.AddMsalAuthentication(options =>
{
    builder.Configuration.Bind("AzureAd", options.ProviderOptions.Authentication);
    options.ProviderOptions.DefaultAccessTokenScopes.Add("api://{后端应用客户端ID}/access_as_user"); // 替换为后端暴露的作用域
});

3. 前端获取AccessToken需指定后端作用域

在DummyClient类中获取令牌时,必须明确指定后端API的作用域,不能沿用默认的Graph API作用域:

  • 示例代码:
var accessTokenResult = await _tokenAcquisition.GetAccessTokenForUserAsync(new[] { "api://{后端应用客户端ID}/access_as_user" });
if (accessTokenResult.TryGetToken(out var accessToken))
{
    requestMessage.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken.Value);
}

4. 后端应用注册需完成API暴露与权限配置

  • 在Azure门户的后端应用注册页面,进入暴露API菜单,添加一个自定义作用域(比如access_as_user)
  • 在前端应用注册页面,进入API权限菜单,添加后端API的权限,并完成管理员同意操作

内容的提问来源于stack exchange,提问作者thibsc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 14:47:10