Skip to content

TOKEN 管理

作者:唐亚峰 | battcn
字数统计:398 字

导入核心包

本系统基于 Spring官方提供的最新SDK spring-security-oauth2-authorization-server:1.1.2 集成封装,简化开发者使用,提供的扩展配置请开发者自行看注释

即便不用全部的架构体系,只用oauth2-spring-boot-starter 也可以轻松自定义 自己内部的oauth2 系统架构

xml
<dependency>
    <groupId>com.wemirr.framework</groupId>
    <artifactId>oauth2-spring-boot-starter</artifactId>
</dependency>

Token 更换

默认采用的 JWT 作为令牌生成器,但是对于无状态的令牌来说加上 Redis 做状态管理违背了 JWT 的设计初衷,对Redis Key 也不够友好,那么就可以考虑使用自定义的 TOKEN 策略了,默认实现了以 UUID 生成方式

开启配置

注意

当你开启自定义 TOKEN 后,需要将 oauth2_registered_client.token_settings 内容修改一下

shell
{
  "@class": "java.util.Collections$UnmodifiableMap",
  "settings.token.reuse-refresh-tokens": true,
  "settings.token.id-token-signature-algorithm": [
    "org.springframework.security.oauth2.jose.jws.SignatureAlgorithm",
    "RS256"
  ],
  "settings.token.access-token-time-to-live": [
    "java.time.Duration",
    7200
  ],
  "settings.token.access-token-format": {
    "@class": "org.springframework.security.oauth2.server.authorization.settings.OAuth2TokenFormat",
    // 如果是 JWT TOKEN 则需要调整成 self-contained
    "value": "reference"
  },
  "settings.token.refresh-token-time-to-live": [
    "java.time.Duration",
    604800
  ],
  "settings.token.authorization-code-time-to-live": [
    "java.time.Duration",
    300
  ],
  "settings.token.device-code-time-to-live": [
    "java.time.Duration",
    300
  ]
}

核心代码:CustomOAuth2AccessTokenGenerator 重点是 oauth2_registered_client.token_settings.settings.token.access-token-format=reference

yaml
extend:
  oauth2:
    server:
      # 自定义 TOKEN
      token-type: custom

服务端配置使用

添加注解 @EnableOAuth2Server 标记当前项目为鉴权服务端

yaml
extend:
  oauth2:
    server:
      type: redis
      registered-client: jdbc
      consent: jdbc
      token-type: jwt
    ignore:
      # 配置权限过滤的地址
      resource-urls:
        - /captcha
        - /instances/**

客户端配置使用

添加注解 @EnableOAuth2Client 标记当前项目为资源客户端

配置

yaml
extend:
  oauth2:
    client:
      opaque-token:
        type: redis
    authorization-type: redis