没有合适的资源?快使用搜索试试~ 我知道了~
11.Oauth2授权之JWT集成
需积分: 5 0 下载量 15 浏览量
2023-01-01
15:07:15
上传
评论
收藏 665KB PDF 举报
温馨提示
试读
11页
11.Oauth2授权之JWT集成
资源推荐
资源详情
资源评论
Oauth2授权之JWT集成
摘要
Spring Cloud Security 为构建安全的SpringBoot应用提供了一系列解决方案,结合Oauth2还可以实现
更多功能,比如使用JWT令牌存储信息,刷新令牌功能,本文将对其结合JWT使用进行详细介绍。
JWT简介
JWT是JSON WEB TOKEN的缩写,它是基于 RFC 7519 标准定义的一种可以安全传输的的JSON对
象,由于使用了数字签名,所以是可信任和安全的。
JWT的组成
JWT token的格式:header.payload.signature;
header中用于存放签名的生成算法;
payload中用于存放数据,比如过期时间、用户名、用户所拥有的权限等;
signature为以header和payload生成的签名,一旦header和payload被篡改,验证将失败。
JWT实例
这是一个JWT的字符串:
{
"alg": "HS256",
"typ": "JWT"
}
{
"user_name": "jourwon",
"scope": [
"all"
],
"exp": 1577678449,
"authorities": [
"admin"
],
"jti": "618cda6a-dfce-4966-b0df-00607f693ab5",
"client_id": "admin"
}
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX25hbWUiOiJqb3Vyd29uIiwic2NvcGUiOls
iYWxsIl0sImV4cCI6MTU3NzY3Nzc2MywiYXV0aG9yaXRpZXMiOlsiYWRtaW4iXSwianRpIjoiMGY4NmE
2ODUtZDIzMS00M2E0LWJhZjYtNzAwMmE0Yzg1YmM1IiwiY2xpZW50X2lkIjoiYWRtaW4iLCJlbmhhbmN
lIjoiZW5oYW5jZSBpbmZvIn0.RLrkBQEOdCikiz0SsJ8ZsVcxk8GkAyKsOj5fZytgNF8
可以在该网站上获得解析结果:https://jwt.io/
创建oauth2-jwt-server模块
该模块只是对oauth2-server模块的扩展,直接复制过来扩展下下即可。
oauth2中存储令牌的方式
在上一节中都是把令牌存储在内存中的,这样如果部署多个服务,就会导致无法使用令牌的问题。
Spring Cloud Security中有两种存储令牌的方式可用于解决该问题,一种是使用Redis来存储,另
一种是使用JWT来存储。
使用Redis存储令牌
在pom.xml中添加Redis相关依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-oauth2</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-security</artifactId>
</dependency>
在application.yml中添加redis相关配置:
添加在Redis中存储令牌的配置:
在授权服务器配置中指定令牌的存储策略为Redis:
server:
port: 9401
spring:
application:
name: oauth2-jwt-server
redis:
# redis相关配置
host: 10.172.0.201
database: 0
@Configuration
public class RedisTokenStoreConfig {
@Autowired
private RedisConnectionFactory redisConnectionFactory;
@Bean
public TokenStore redisTokenStore() {
return new RedisTokenStore(redisConnectionFactory);
}
}
@Configuration
@EnableAuthorizationServer
public class AuthorizationServerConfig extends
AuthorizationServerConfigurerAdapter {
@Autowired
private PasswordEncoder passwordEncoder;
@Autowired
private AuthenticationManager authenticationManager;
@Autowired
private UserService userService;
@Autowired
@Qualifier("redisTokenStore")
private TokenStore tokenStore;
/**
* 使用密码模式需要配置
*/
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) {
endpoints.authenticationManager(authenticationManager)
.userDetailsService(userService)
剩余10页未读,继续阅读
资源评论
愤怒的熊猫x
- 粉丝: 9
- 资源: 44
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功