JustAuth/docs/using-state.md
yadong.zhang fdc78212ff 🍻 文档
2019-09-17 18:38:35 +08:00

2.5 KiB
Raw Blame History

使用State

state使用的流程

在JustAuth中state参数的使用流程如下:

  1. 获取authorizeUrl时创建state(开发者创建,如果不创建则系统默认生成)
  2. 缓存stateJustAuth执行
  3. 内置的缓存调度器自动清除已过期的stateJustAuth执行

创建state开发者

state在OAuth授权流程中是一个非必要但很重要的参数,就如名词解释中描述的:state是用来保持授权会话流程完整性防止CSRF攻击的安全的随机的参数由开发者生成

在JustAuth中提供了一个默认的创建state的方法使用方式

String state = AuthStateUtils.createState()

createState的内部实现其实就是生成了一个UUID采用 jdk 9 的形式优化性能该工具是直接copy自micamica是一个SpringBoot微服务高效开发工具集开源地址https://github.com/lets-mica/mica关于mica uuid生成方式的压测结果可以参考https://github.com/lets-mica/mica-jmh/wiki/uuid

除此之外,开发者还可以自己生成特定的state参数。

缓存stateJustAuth

在JustAuth中内置了一个基于map的state缓存器默认缓存有效期为3分钟缓存配置见AuthCacheConfig.java)。AuthCacheConfig中包含两个配置参数:

  • timeout 缓存过期时间默认3分钟
  • schedulePrune 是否开启定时清理过期state的任务默认开启。如果不开启则需要开发者自己对state做处理防止map存入过多内容

缓存state的操作是在getRealState中触发的,不需要开发者自己处理

/**
 * 获取state如果为空 则默认取当前日期的时间戳
 *
 * @param state 原始的state
 * @return 返回不为null的state
 */
protected String getRealState(String state) {
    if (StringUtils.isEmpty(state)) {
        state = UuidUtils.getUUID();
    }
    // 缓存state
    authStateCache.cache(state, state);
    return state;
}

注:关于自定义缓存,请参考下节内容。

清理stateJustAuth

JustAuth内置了一个缓存调度器默认3分钟清理一次过期的state,缓存清理时间可以通过AuthCacheConfig.timeout进行修改,不建议修改太大。