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

Angular集成Azure AD B2C:AcquireTokenSilent未过期仍返回新AccessToken

Azure AD B2C acquireTokenSilent 重复获取新令牌的解决方案

以下是针对你遇到的「未过期但每次返回新令牌」问题的排查和解决步骤:

  • 检查Scope匹配性
    确保登录流程中请求的Scope包含https://*********.com/api/FullAccess。如果登录时未申请该Scope,缓存中不会存在对应令牌,每次调用acquireTokenSilent都会触发新的令牌获取。

  • 调整缓存查找策略
    将cacheLookupPolicy从CacheLookupPolicy.Default改为CacheLookupPolicy.CacheOnly,强制优先从本地缓存读取有效令牌,只有缓存无有效令牌时才会失败(此时可再处理刷新逻辑)。修改后的请求参数:

    const accessTokenRequest = {
      scopes: ["https://*********.com/api/FullAccess"],
      account: account || this.authService.instance.getAllAccounts()[0],
      forceRefresh: false,
      cacheLookupPolicy: CacheLookupPolicy.CacheOnly,
      refreshTokenExpirationOffsetSeconds: 7200
    };
    
  • 移除不必要的刷新偏移参数
    你设置的refreshTokenExpirationOffsetSeconds:7200会让MSAL在刷新令牌过期前2小时就主动获取新令牌。如果你的访问令牌有效期较短,可能会被这个参数触发提前刷新。尝试移除该参数,使用默认值后再观察结果。

  • 确认账户匹配正确性
    检查getAccountByUsername('abc@gmail.com')返回的账户是否与缓存中的账户完全匹配(比如用户名大小写、租户ID是否一致)。如果账户不匹配,MSAL会认为没有对应缓存令牌,从而重新获取。可以打印account和getAllAccounts()的结果进行比对。

  • 手动验证缓存内容
    在调用acquireTokenSilent前,通过authService.instance.getTokenCache().getAccessTokenCache()查看缓存中的令牌信息,确认是否存在符合Scope和账户要求的未过期令牌。如果存在但方法仍返回新令牌,重点排查参数配置问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 16:00:12