本文共 2392 字,大约阅读时间需要 7 分钟。
在本文中,我们采用Redis来存储OAuth2的access_token。相比JWT存储方式,Redis具有以下优势:
项目采用Spring Boot框架,代码结构清晰,主要模块包括:
com.github.hellxz.oauth2├── config│ ├── AuthorizationConfig.java # 授权服务器配置│ └── SecurityConfig.java # 安全配置├── model│ └── UserVO.java # 用户信息模型├── resource│ ├── ResourceController.java # 资源控制器│ └── RedisResourceServer.java # 资源服务器启动类└── repository └── RedisTokenStore.java # Redis token存储实现
项目依赖主要包括:
org.springframework.security.oauth spring-security-oauth2 2.4.0.RELEASE org.springframework.boot spring-boot-starter-data-redis 2.2.1.RELEASE com.alibaba fastjson 1.2.62
在RedisTokenStore中,我们通过RedisConnectionFactory获取Redis连接,并设置默认前缀auth-token:,实现token存储与删除操作。
RedisTokenStore redisTokenStore = new RedisTokenStore(redisConnectionFactory);redisTokenStore.setPrefix("auth-token:"); 在AuthorizationConfig中,我们进行以下配置:
@Overridepublic void configure(AuthorizationServerSecurityConfigurer security) throws Exception { security.allowFormAuthenticationForClients() .checkTokenAccess("permitAll()") .tokenKeyAccess("permitAll()");} 在ResourceServerConfig中,我们进行以下配置:
@Overridepublic void configure(ResourceServerSecurityConfigurer resources) throws Exception { resources.stateless(true) .tokenStore(tokenStore());} @SpringBootApplicationpublic class RedisAuthorizationServer { public static void main(String[] args) { SpringApplication.run(RedisAuthorizationServer.class, args); }} @SpringBootApplicationpublic class RedisResourceServer { public static void main(String[] args) { SpringApplication.run(RedisResourceServer.class, args); }} 通过以上配置,我们成功实现了OAuth2授权服务器与资源服务器的分离部署,采用Redis存储token,确保了高效、安全的权限管理。
转载地址:http://uxauz.baihongyu.com/