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

Blazor Wasm应用访问Graph及自定义下游API授权切换问题

解决Blazor WASM同时访问Graph与自定义API的授权切换问题

核心问题本质

你遇到的问题是没有针对不同下游API请求对应专属令牌,默认复用了Graph的令牌,但自定义API只认可自身受众(Audience)的令牌,因此触发无效签名错误。

具体解决步骤

1. 确认客户端应用注册配置

  • 检查自定义API的应用ID URI已添加到客户端应用的API权限列表中,且已完成管理员同意(应用权限场景)或用户同意(委托权限场景)。
  • 确保Graph权限和自定义API权限都已正确配置并生效。

2. 为不同API编写独立的令牌获取逻辑

Blazor WASM中使用IAccessTokenProvider获取令牌时,必须指定目标API的范围或受众,不能复用默认配置:

获取Graph令牌代码

var graphTokenResult = await _accessTokenProvider.RequestAccessToken(
    new AccessTokenRequestOptions
    {
        Scopes = new[] { "https://graph.microsoft.com/User.Read" } // 替换为你需要的Graph具体权限
    });

if (graphTokenResult.TryGetToken(out var graphToken))
{
    // 使用graphToken调用Graph API
}

获取自定义API令牌代码

var customApiTokenResult = await _accessTokenProvider.RequestAccessToken(
    new AccessTokenRequestOptions
    {
        // 替换为你的自定义API应用ID和权限范围
        Scopes = new[] { "api://<自定义API应用ID>/<自定义权限范围>" }
        // 也可直接指定受众:
        // Audience = "api://<自定义API应用ID>"
    });

if (customApiTokenResult.TryGetToken(out var customApiToken))
{
    // 将令牌加入请求头,调用自定义API
    httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", customApiToken.Value);
    var response = await httpClient.GetAsync("api/your-endpoint");
}

3. 为自定义API配置专属HttpClient(推荐)

为避免令牌混用,建议通过IHttpClientFactory创建专属HttpClient,自动注入对应令牌:

// Program.cs中注册
builder.Services.AddHttpClient("CustomApiClient", client =>
{
    client.BaseAddress = new Uri("https://你的自定义API地址/");
})
.AddHttpMessageHandler(sp =>
{
    var handler = sp.GetRequiredService<AuthorizationMessageHandler>()
        .ConfigureHandler(
            authorizedUrls: new[] { "https://你的自定义API地址/" },
            scopes: new[] { "api://<自定义API应用ID>/<自定义权限范围>" });
    return handler;
});

组件中注入并使用:

private readonly HttpClient _customApiClient;

public YourComponent(IHttpClientFactory httpClientFactory)
{
    _customApiClient = httpClientFactory.CreateClient("CustomApiClient");
}

// 直接调用,HttpClient会自动携带正确的自定义API令牌
var response = await _customApiClient.GetAsync("api/your-endpoint");

4. 验证令牌有效性

用JWT解码工具检查令牌的aud(受众)字段:自定义API的令牌受众必须是自身的应用ID URI,而非Graph的https://graph.microsoft.com。如果不符,检查请求令牌时的Scope或Audience配置是否正确。

常见排查点

  • 自定义API的应用注册中,应用ID URI是否正确设置,且与客户端请求的Scope/Audience完全一致。
  • 客户端应用是否已成功获取自定义API的权限(在Azure AD应用注册的API权限列表中确认状态)。
  • 调用自定义API时,是否不小心复用了Graph的HttpClient实例或令牌。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 00:35:27