IdentityServer4刷新Access Token后JTI Claim值未变更的疑问
关于IdentityServer4刷新Access Token后JTI Claim不变的问题
这是IdentityServer4的设计特性,而非Bug,具体原因和说明如下:
- JTI在IdentityServer4中的定位是关联刷新令牌(Refresh Token)与对应访问令牌(Access Token)的会话系列,而非单个Access Token的唯一标识。用同一个Refresh Token刷新得到的新Access Token会继承原JTI,以此标记它们属于同一“令牌会话”。
- 从RFC7519的规范来看,要求JTI确保不同数据对象的冲突概率可忽略,但这里的“数据对象”在IdentityServer4的设计中被定义为令牌会话而非单个Access Token。同一会话下的多个Access Token共享JTI,并不违反规范——因为它们属于同一会话上下文,并非完全独立的数据对象。
- 如果你需要为每个Access Token生成独立的JTI,可以通过自定义令牌生成逻辑实现:
- 实现
ITokenService接口,重写创建Access Token的方法 - 在自定义逻辑中,为每次生成的Access Token生成新的唯一JTI值
- 将自定义服务注册到DI容器中替换默认实现
- 实现
补充:这种设计的初衷是简化会话管理,比如在撤销Refresh Token时,可以通过JTI批量失效同一会话下的所有Access Token。
内容的提问来源于stack exchange,提问作者Gioalhaz
相关产品推荐
相关产品推荐

