返回介绍

15.6 使用 Redis

发布于 2025-04-26 13:16:50 字数 1903 浏览 0 评论 0 收藏

在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。