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

使用Azure ADB2C与MSAL,无需重登如何刷新含自定义声明的Bearer令牌?

解决方案:无需登出更新ADB2C Bearer令牌中的自定义声明

要实现添加新实例后无需登出重新登录即可更新extension_InstancesAvailable声明,核心是利用**刷新令牌(Refresh Token)**触发静默令牌刷新流程,同时确保ADB2C的API连接器在刷新时重新执行,返回最新的实例列表。

关键步骤

1. 确认ADB2C配置兼容性

确保你的用户流和API连接器配置满足:

  • 用户流允许使用刷新令牌(ADB2C默认启用,可在用户流的"令牌"设置中确认)
  • 绑定的API连接器处于**"在令牌中包含应用声明之前(预览版)"**阶段,该阶段在刷新令牌请求新令牌时会被触发,因此你的API端点会被重新调用以获取最新的实例数据

2. 在React应用中触发静默令牌刷新

使用MSAL.js的acquireTokenSilent方法,该方法会自动利用当前缓存的刷新令牌向ADB2C请求新的ID/访问令牌,全程无需用户交互(包括无需输入密码)。

示例代码(基于MSAL React):

import { useMsal } from "@azure/msal-react";

const refreshInstanceClaims = async () => {
  const { instance, accounts } = useMsal();
  const activeAccount = accounts[0];

  if (!activeAccount) return;

  const tokenRequest = {
    account: activeAccount,
    scopes: ["openid", "profile", "api://your-client-id/your-scope"], // 替换为你的应用作用域
  };

  try {
    // 静默获取新令牌
    const response = await instance.acquireTokenSilent(tokenRequest);
    // 从新ID令牌中提取更新后的实例列表
    const updatedInstances = response.idTokenClaims.extension_InstancesAvailable;
    // 更新应用状态(比如存入React State)
    console.log("已更新实例列表:", updatedInstances);
  } catch (error) {
    // 处理静默刷新失败的情况(如刷新令牌过期)
    if (error.name === "InteractionRequiredAuthError") {
      // 触发无密码的交互流程(如弹出式登录,SSO会自动完成认证)
      await instance.acquireTokenPopup(tokenRequest);
    } else {
      console.error("令牌刷新失败:", error);
    }
  }
};

3. 验证API连接器逻辑

确保你的API端点在被调用时,是实时获取最新的用户实例列表(比如从数据库读取),而不是返回缓存数据,这样才能保证新令牌中的extension_InstancesAvailable包含刚添加的实例。

注意事项

  • 刷新令牌有效期:ADB2C默认刷新令牌有效期为90天,可在用户流设置中调整。只要刷新令牌有效,就能反复触发静默刷新。
  • 交互 fallback:如果静默刷新失败(如刷新令牌过期、用户长时间未操作),acquireTokenPopup/acquireTokenRedirect会触发SSO流程,用户无需重新输入密码即可完成认证。
  • 令牌缓存:MSAL会自动更新本地缓存中的令牌,后续API请求会自动使用新令牌,无需手动替换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 21:28:13