15.6 使用 Redis
在 15.5.2.1 小节搭建授权服务器时,我们配置将生成的令牌 Access Token 存在内存中,当时提供的 TokenStore 实例是 InMemoryTokenStore:
@Configuration public class AccessTokenConfig { @Bean TokenStore tokenStore() { return new InMemoryTokenStore(); } }
事实上,TokenStore 接口有多种不同的实现类,如图 15-17 所示。
图 15-17 TokenStore 实现类
可以看到,我们有多种方式来存储 Access Token:
- InMemoryTokenStore:这是我们之前使用的方式,即将 Access Token 存到内存中,单机使用这个没有问题,但是在分布式环境下不推荐使用。
- JdbcTokenStore:将 Access Token 保存到数据中,方便和其他应用共享令牌信息。
- JwtTokenStore:这个其实不算是存储,因为使用了 JWT 之后,在生成的 JWT 中就有用户的所有信息,服务端不需要保存。
- RedisTokenStore:将 Access Token 存到 Redis 中。
- JwkTokenStore:这个只在资源服务器上使用,主要作用是解码 JWT 并使用相应的 JWK 验证其签名(JWS)。
虽然这里支持的方案比较多,但是我们常用的方案实际上主要是这两个:RedisTokenStore 和 JwtTokenStore,JwtTokenStore 后面会做介绍,这里我们先来看一下 RedisTokenStore。
首先我们启动一个 Redis。
接下来在 15.5.2.1 小节搭建的授权服务器基础上,添加 Redis 依赖,代码如下:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
然后在 application.properties 中添加 Redis 配置:
spring.redis.host=127.0.0.1 spring.redis.port=6379 spring.redis.password=123
配置完成后,我们修改 TokenStore 的实例,代码如下:
@Configuration public class AccessTokenConfig { @Autowired RedisConnectionFactory redisConnectionFactory; @Bean TokenStore tokenStore() { return new RedisTokenStore(redisConnectionFactory); } }
只需要修改一下 TokenStore 实例即可。
配置完成后,再去启动 auth_server,此时授权服务器生成的 Access Token 令牌就会保存到 Redis 中。Access Token 在 Redis 中的有效期就是令牌的有效期,也正是因为 Redis 中的这种过期机制,让它在存储 Access Token 时具有天然的优势。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论