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

如何在Spring Authorization Server生成的JWT中设置jti声明?及两类生成器差异

Spring Authorization Server相关问题解答

一、如何在JWT令牌中添加jti声明

你可以通过自定义JwtCustomizer来实现,无需重写JwtGenerator的完整方法,具体步骤如下:

  1. 创建自定义JwtCustomizer Bean,用UUID生成唯一的jti标识并添加到JWT声明中:
@Bean
public JwtCustomizer jwtCustomizer() {
    return (jwtBuilder, context) -> {
        String jti = UUID.randomUUID().toString();
        jwtBuilder.id(jti);
    };
}
  1. 在授权服务器配置中,将这个自定义组件关联到JWT生成逻辑:
@Bean
@Order(Ordered.HIGHEST_PRECEDENCE)
public SecurityFilterChain authorizationServerSecurityFilterChain(HttpSecurity http) throws Exception {
    OAuth2AuthorizationServerConfigurer authorizationServerConfigurer =
            new OAuth2AuthorizationServerConfigurer();
    
    authorizationServerConfigurer
            .token(token -> token
                    .jwt(jwt -> jwt
                            .customizer(jwtCustomizer())));
    
    // 补充其他必要配置
    return http.apply(authorizationServerConfigurer).and().build();
}

配置完成后,生成的JWT令牌就会包含jti声明。

二、JwtGenerator与OAuth2AccessTokenGenerator的区别

  • 职责范围不同:

    • JwtGenerator是专门生成JWT格式令牌的组件,只处理JWT的构建、签名、声明填充等专属逻辑。
    • OAuth2AccessTokenGenerator是通用令牌生成器,支持生成多种类型的访问令牌:既可以生成默认的不透明(Opaque)令牌,也能结合JwtGenerator生成JWT令牌,属于上层抽象组件。
  • 使用场景不同:

    • 当明确需要生成JWT令牌时,会直接或间接调用JwtGenerator,比如配置中指定jwt()方式生成令牌时,底层依赖它构建JWT。
    • OAuth2AccessTokenGenerator是默认的令牌生成器,若未配置JWT相关自定义逻辑,它会生成不透明令牌(令牌本身是随机字符串,实际信息存储在授权服务器端)。
  • 内部逻辑差异:

    • JwtGenerator会处理JWT特有的元素,比如签名算法、密钥、标准声明(iss、exp、sub等)以及自定义声明的添加。
    • OAuth2AccessTokenGenerator负责设置令牌的基础属性(过期时间、权限范围等),再根据配置决定生成不透明令牌,还是调用JwtGenerator生成JWT。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 21:30:09