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

Blazor WASM配置本地缓存后API授权失败问题求助

问题解决方案及相关疑问解答

一、API授权失败的解决步骤

1. 修正MSAL认证配置,确保缓存与令牌范围匹配

修改WASM项目的Program.cs中MSAL配置,添加默认访问令牌范围,并确保缓存配置正确:

builder.Services.AddMsalAuthentication(options =>
{
    // 绑定AzureAD配置(确保appsettings.json中配置正确)
    builder.Configuration.Bind("AzureAd", options.ProviderOptions.Authentication);
    
    // 添加API所需的默认访问范围,与CustomAuthorizationMessageHandler中的scopes一致
    options.ProviderOptions.DefaultAccessTokenScopes.Add("api://<<some id>>/API.Access");
    
    if (builder.HostEnvironment.IsDevelopment())
    {
        options.ProviderOptions.Cache.CacheLocation = "localStorage";
        // 开发环境开启调试日志,便于排查令牌获取问题
        options.ProviderOptions.Logging.Level = LogLevel.Debug;
    }
});

2. 确保CustomAuthorizationMessageHandler正确注册

在Program.cs中添加Handler的Scoped注册(如果尚未添加):

builder.Services.AddScoped<CustomAuthorizationMessageHandler>();

3. 验证客户端与API的配置一致性

  • 检查CustomAuthorizationMessageHandler中的authorizedUrls是否与API的BaseAddress完全一致(包括协议、域名、端口)
  • 确认API项目的appsettings.json中AzureAD配置的Audience与令牌的aud字段匹配:
    "AzureAd": {
        "Instance": "https://login.microsoftonline.com/",
        "TenantId": "<<你的租户ID>>",
        "ClientId": "<<API的客户端ID>>",
        "Audience": "api://<<some id>>"
    }
    

4. 排查浏览器缓存的令牌有效性

打开浏览器开发者工具(F12),进入Application -> Local Storage,查看是否存在msal.<你的WASM客户端ID>.token相关缓存项:

  • 确认access_token存在且未过期(可通过jwt.io解析令牌查看exp字段)
  • 如果令牌过期,MSAL应自动使用refresh_token刷新,若未触发,检查refresh_token是否存在且有效

二、生产环境相关疑问解答

1. 生产环境用户是否需要每次访问都登录?

不需要。MSAL默认会将令牌缓存到sessionStorage(关闭浏览器后失效),若配置CacheLocation = "localStorage",则关闭浏览器再打开仍能保持登录状态,直到令牌或刷新令牌过期。

2. 令牌是否有有效期?

是的:

  • Access Token默认有效期为1小时,过期后MSAL会自动使用Refresh Token获取新的Access Token,用户无需手动登录
  • Refresh Token默认有效期为90天,在此期间只要用户有活跃操作,MSAL会自动轮换Refresh Token;若用户长时间未访问,Refresh Token过期后才需要重新登录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 21:15:42