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

Spring Boot+Angular集成Azure B2C:AccessToken验证与自定义JWT生成

验证Azure B2C Access Token并生成自定义JWT方案

一、Spring Boot验证Azure B2C Access Token的核心实现

1. 依赖库选择

直接使用Spring Security官方适配Azure的starter,无需手动编写复杂验证逻辑:

  • 引入spring-boot-starter-oauth2-resource-server(Spring Security资源服务器基础依赖)
  • 引入azure-spring-boot-starter-active-directory(专门适配Azure AD/B2C的认证集成包)

2. 验证逻辑与微软服务交互

Spring Security会自动从Azure B2C的OpenID配置端点获取公钥,完成Access Token的签名校验、有效期验证等操作,不需要手动调用微软的验证API。该端点格式为:
https://<你的B2C租户名称>.b2clogin.com/<你的B2C租户ID>/<你的用户流名称>/v2.0/.well-known/openid-configuration
示例:若租户名为contoso,用户流为B2C_1_signupsignin,则端点为https://contoso.b2clogin.com/contoso.onmicrosoft.com/B2C_1_signupsignin/v2.0/.well-known/openid-configuration

3. 配置示例

在application.yml中添加配置:

spring:
  security:
    oauth2:
      resourceserver:
        jwt:
          issuer-uri: https://<你的B2C租户名称>.b2clogin.com/<你的B2C租户ID>/v2.0/
          jwk-set-uri: https://<你的B2C租户名称>.b2clogin.com/<你的B2C租户ID>/<你的用户流名称>/discovery/v2.0/keys
azure:
  activedirectory:
    b2c:
      tenant-id: <你的B2C租户ID>
      user-flows:
        sign-up-or-sign-in: <你的用户流名称>

Spring Security配置类:

@Configuration
@EnableWebSecurity
public class SecurityConfig {
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests(auth -> auth.anyRequest().authenticated())
            .oauth2ResourceServer(oauth2 -> oauth2.jwt(jwt -> jwt.jwtAuthenticationConverter(jwtAuthenticationConverter())));
        return http.build();
    }

    // 可选:提取Azure Token中的用户唯一标识(如sub字段),用于后续查库
    private JwtAuthenticationConverter jwtAuthenticationConverter() {
        JwtGrantedAuthoritiesConverter authoritiesConverter = new JwtGrantedAuthoritiesConverter();
        JwtAuthenticationConverter converter = new JwtAuthenticationConverter();
        converter.setJwtGrantedAuthoritiesConverter(authoritiesConverter);
        return converter;
    }
}

二、生成自定义JWT流程

  1. 验证Azure Access Token通过后,从Token中提取用户唯一标识(如sub字段),以此为依据从数据库读取用户角色权限。
  2. 使用JJWT库(io.jsonwebtoken:jjwt-api、io.jsonwebtoken:jjwt-impl、io.jsonwebtoken:jjwt-jackson)生成自定义JWT,将角色权限存入roles或自定义Claim中。
  3. 将自定义JWT返回给Angular客户端,后续客户端请求API时携带该Token,Spring Boot可单独配置自定义JWT的验证逻辑。

三、关键注意事项

  • 确保Azure B2C应用注册中,为Spring Boot API配置了正确的访问范围,Angular请求Access Token时必须包含该范围,否则Token无法通过API验证。
  • 自定义JWT建议使用非对称加密(RSA)生成签名,避免对称密钥泄露导致Token伪造风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 07:35:24