Skip to content

安全

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

导入核心包

本系统基于 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 生成方式

开启配置

核心代码: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/**

自定义登录类型

默认支持OAuth2.1 标准的登录模式

登录类型扩展

实现 IntegrationAuthenticator 接口即可自定义N种基于 grant_type:custom 方式的自定义登录,该项目默认提供了基于用户名密码和图文验证码方式,微信/短信可以参考图文依样画葫芦

java
@Slf4j
@Component
public class XXXXXXAuthenticator implements IntegrationAuthenticator {

    @Override
   public void prepare(IntegrationAuthentication integrationAuthentication) {
        // 你的验证逻辑处理(比如参数合法性、验证码是否合法 等等)
   }

    @Override
    public UserInfoDetails authenticate(IntegrationAuthentication integrationAuthentication) {
        // 你的查询逻辑,最终返回 UserInfoDetails 就可以
    }
}

客户端配置使用

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

配置

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