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

使用msal.js对接Azure AD B2C登录后如何获取JWT令牌

MSAL Redirect模式登录后获取JWT访问令牌的方法

注意:useMsal返回的实例默认不会直接存储访问令牌,登录流程仅会下发ID令牌用于身份校验,访问接口所需的JWT访问令牌需要主动调用令牌获取接口拉取。

实现步骤

  1. 先从msal基础库导入交互异常类用于异常兼容
  2. 配置你需要访问的资源对应的scope权限,调用静默获取令牌接口,失败后自动降级为Redirect交互模式拉取令牌

完整参考代码如下:

import { useEffect } from "react";
import { MsalProvider, MsalAuthenticationTemplate, useMsal, useAccount } from "@azure/msal-react";
import { InteractionRequiredAuthError } from "@azure/msal-browser";

// 替换为你实际业务需要的权限范围,和Azure应用注册的配置保持一致
const tokenRequest = {
  scopes: ["User.Read", "你的自定义API Scope"]
}

function YourProtectedComponent() {
  const { instance } = useMsal();
  const account = useAccount(); // 自动获取当前已登录的账号信息

  const getAccessToken = async () => {
    if (!account) return null;
    try {
      // 优先从本地缓存拉取有效令牌,缓存过期会自动静默刷新
      const response = await instance.acquireTokenSilent({
        ...tokenRequest,
        account: account
      });
      // response.accessToken 就是你需要的JWT格式访问令牌
      const jwtToken = response.accessToken;
      // 后续可以把令牌放到请求头里调用后端接口
      return jwtToken;
    } catch (error) {
      // 静默获取失败需要用户交互授权,直接走Redirect模式拉取令牌
      if (error instanceof InteractionRequiredAuthError) {
        instance.acquireTokenRedirect({
          ...tokenRequest,
          account: account
        });
      }
      console.error("令牌获取失败:", error);
      return null;
    }
  }

  // 组件挂载时触发令牌获取,也可以在调用接口前按需触发
  useEffect(() => {
    getAccessToken();
  }, [instance, account])

  return <div>受保护的业务内容</div>
}

注意事项

  • 代码中的scopes必须替换为你实际访问资源对应的权限,如果你要调用自己的后端接口,填写你在Azure应用注册中暴露的API Scope即可
  • MsalAuthenticationTemplate的Redirect模式已经自动处理了登录回调后的令牌缓存逻辑,不需要额外手动处理回调结果
  • 如果需要JWT格式的ID令牌,可以从response.idToken直接获取

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 01:24:01