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

Azure AD B2C+MSAL JS调用AcquireTokenAsync遇AADB2C90055错误求助

解决AADB2C90055错误:作用域需指定资源的问题

这个错误我之前也碰到过,核心原因是你混淆了ID令牌和访问令牌的获取逻辑,以及对应的作用域使用方式。咱们一步步来解决:

先搞懂错误根源

AADB2C90055 报错是因为你用了获取API访问令牌的方法(比如AcquireTokenAsync),但传入的是openid profile这类属于ID令牌的作用域。ID令牌的作用域不需要绑定资源,但获取访问令牌的请求必须明确指定对应的API资源——哪怕你的客户端和API用同一个Client ID,也得按规则来。

具体解决步骤

1. 区分两种令牌的获取方式

  • 如果你的需求是刷新用户身份会话(获取ID令牌):
    不要用AcquireTokenAsync,改用MSAL的静默刷新方法针对ID令牌作用域操作。比如在Angular里可以这么写:

    // 先获取当前登录账户
    const activeAccount = this.msalService.instance.getActiveAccount();
    if (activeAccount) {
      const refreshRequest = {
        account: activeAccount,
        scopes: ["openid", "profile"]
      };
      try {
        // 静默刷新ID令牌
        const response = await this.msalService.instance.acquireTokenSilent(refreshRequest);
        // 这里可以拿到更新后的idToken
      } catch (err) {
        // 静默失败就弹出登录框重新获取
        await this.msalService.instance.acquireTokenPopup(refreshRequest);
      }
    }
    
  • 如果你的需求是调用API(获取访问令牌):
    必须使用API专属的作用域,格式是api://{你的Client ID}/{自定义作用域名},比如api://xxxxxx/access_as_user。代码调整如下:

    // 替换成你实际的API作用域
    const apiScopes = ["api://{your-client-id}/access_as_user"];
    const tokenRequest = {
      account: this.msalService.instance.getActiveAccount(),
      scopes: apiScopes
    };
    try {
      const response = await this.msalService.instance.acquireTokenSilent(tokenRequest);
      // 用response.accessToken去调用你的API
    } catch (err) {
      await this.msalService.instance.acquireTokenPopup(tokenRequest);
    }
    

2. 检查Azure AD B2C的应用配置

因为你的客户端和API共用同一个Client ID,要确保:

  • 在Azure AD B2C的应用配置里,API权限部分已经添加了自身作为API,并勾选了需要的作用域(比如access_as_user)。
  • 应用的隐含流设置中,已经勾选了ID令牌选项(如果需要用openid作用域获取ID令牌的话)。

3. 记住关键规则

  • ID令牌(id_token):用来验证用户身份,作用域包含openid、profile,不需要绑定API资源。
  • 访问令牌(access_token):用来调用受保护API,必须绑定具体的API资源/作用域,格式严格遵循{资源标识符}/{作用域}。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:04:27