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

如何借助MSAL从Azure AD OAuth令牌获取用户详情(邮箱、姓名)

用MSAL实现前端携带Access Token保护Spring Boot API

完全可以通过MSAL实现这个需求,核心思路是前端用MSAL获取针对后端API的Access Token,请求时携带令牌,后端验证令牌合法性来保护接口。以下是具体实现步骤:

前端(React + MSAL)操作

  • 确保已集成MSAL React库,获取Access Token时必须指定后端API的专属scope(格式为api://<你的后端Azure AD客户端ID>/.default),这样令牌才会被后端认可
  • 发起API请求时,在请求头中添加Authorization: Bearer {accessToken},将令牌传递给后端
  • 示例代码(基于Axios):
import { useMsal } from "@azure/msal-react";
import axios from "axios";

const callProtectedApi = async () => {
  const { instance } = useMsal();
  const account = instance.getActiveAccount();
  const request = {
    account: account,
    scopes: ["api://<backend-client-id>/.default"] // 替换为你的后端scope
  };

  try {
    const response = await instance.acquireTokenSilent(request);
    const apiResponse = await axios.get("/api/protected", {
      headers: {
        Authorization: `Bearer ${response.accessToken}`
      }
    });
    return apiResponse.data;
  } catch (error) {
    // 处理令牌获取失败(比如需要交互式登录)
    instance.acquireTokenPopup(request);
  }
};

后端(Spring Boot)操作

  • 添加Spring Security和Azure AD资源服务器依赖到pom.xml:
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
</dependency>
  • 在application.yml中配置Azure AD信息:
spring:
  security:
    oauth2:
      resourceserver:
        jwt:
          issuer-uri: https://login.microsoftonline.com/<你的租户ID>/v2.0
          audience: api://<你的后端Azure AD客户端ID>
  • 配置SecurityFilterChain,验证JWT令牌并保护API:
import org.springframework.context.annotation.Bean;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.SecurityFilterChain;

@Configuration
public class SecurityConfig {

  @Bean
  public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
    http
      .authorizeHttpRequests(auth -> auth
        .anyRequest().authenticated() // 所有请求都需要认证
      )
      .oauth2ResourceServer(oauth2 -> oauth2
        .jwt(jwt -> jwt
          .jwtAuthenticationConverter(new AzureADJwtAuthenticationConverter()) // 可选:自定义令牌转换逻辑
        )
      );
    return http.build();
  }
}

关键说明

  • 后端的Azure AD客户端ID需要提前在Azure门户注册,确保前端请求的scope和后端配置的audience一致
  • MSAL会自动处理令牌的缓存、刷新逻辑,前端无需手动管理令牌生命周期
  • 后端通过验证令牌的签名、过期时间、受众(audience)和scope,确保请求来自合法用户

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 06:50:53