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

Spring Boot中OAuth2.1授权服务器如何自定义含用户信息的访问令牌

在Spring Boot OAuth2.1授权服务器中自定义访问令牌(包含用户信息)

实现核心

要在OAuth2.1的JWT格式访问令牌中添加用户名、手机号等用户信息,核心是通过自定义JWT Claims增强器,在令牌生成阶段注入额外用户字段。

具体步骤

1. 自定义JWT Token增强器

实现OAuth2TokenCustomizer<JwtEncodingContext>接口,在令牌编码时从用户详情中提取信息并添加到JWT的Claims里:

@Bean
public OAuth2TokenCustomizer<JwtEncodingContext> jwtTokenCustomizer(UserDetailsService userDetailsService) {
    return context -> {
        Authentication auth = context.getPrincipal();
        // 加载当前用户的完整详情
        UserDetails user = userDetailsService.loadUserByUsername(auth.getName());
        
        // 假设你的用户实体是CustomUser,包含手机号等扩展字段
        if (user instanceof CustomUser customUser) {
            context.getClaims()
                   .claim("username", customUser.getUsername())
                   .claim("mobile", customUser.getMobile());
        }
    };
}

2. 扩展UserDetails实体

创建自定义的UserDetails实现类,包含需要存入令牌的用户字段:

public class CustomUser implements UserDetails {
    private String username;
    private String password;
    private String mobile;
    // 其他必要字段(如权限列表)
    
    // 实现UserDetails接口的所有方法,省略getter/setter逻辑
}

3. 关联授权服务器配置

确保授权服务器使用JWT作为令牌格式,并将自定义的Token增强器纳入配置:

@Configuration
@EnableAuthorizationServer
public class AuthServerConfig {

    @Bean
    public OAuth2AuthorizationServerConfigurer authorizationServerConfigurer(
            JwtEncoder jwtEncoder,
            OAuth2TokenCustomizer<JwtEncodingContext> jwtTokenCustomizer) {
        return new OAuth2AuthorizationServerConfigurer()
                .tokenGenerator(new JwtTokenGenerator(jwtEncoder, jwtTokenCustomizer))
                // 其他配置(如客户端信息、授权端点等)
                .clientRepository(clientRepository())
                .authorizationService(authorizationService());
    }
}

验证方法

生成访问令牌后,使用JWT解析工具(如本地解析类或在线工具)解码令牌,检查payload部分是否包含username和mobile字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 13:37:23