在上一节中我们配置了权限服务,并且可以通过oAuth2提供的几种模式获取token,那么获取到token后如何访问资源服务呢?
JWT是什么?
JSON Web Token(JWT)是一个开放的行业标准(RFC 7519),它定义了一种简介的、自包含的协议格式,用于在通信双方传递json对象,传递的信息经过数字签名可以被验证和信任。JWT可以使用HMAC算法或使用RSA的公 钥/私钥对来签名,防止被篡改。
JWT令牌的优点:
1、jwt基于json,非常方便解析。
2、可以在令牌中自定义丰富的内容,易扩展。
3、通过非对称加密算法及数字签名技术,JWT防止篡改,安全性高。
4、资源服务使用JWT可不依赖认证服务即可完成授权。
缺点:
1、JWT令牌较长,占存储空间比较大。
代码实现:
一:授权服务JWT的配置:
(1) 第一步:准备一个具备授权认证的服务 授权认证服务搭建
(2) 第二步:修改令牌储存策列的配置类,如下,之前搭建的是基于内存的;
@Configuration
public class TokenStoreConfig {
/**
* 令牌的存储策列(基于内存的存储)生成普通令牌,后面可用jwt
* @return
*/
// @Bean
// public TokenStore tokenStore(){
//
// return new InMemoryTokenStore();
// }
/**
* 密钥签名 授权服务 与 资源服务配置一样的
*/
private static final String SIGNING_KEY = "signing_key";
/**
*Jwt 的令牌存贮策列
* @return
*/
@Bean
public TokenStore tokenStore(){
return new JwtTokenStore(this.accessTokenConverter());
}
@Bean
public JwtAccessTokenConverter accessTokenConverter(){
JwtAccessTokenConverter jwt = new JwtAccessTokenConverter();
jwt.setSigningKey(SIGNING_KEY);
return jwt;
}
}
(3) 第三步:修改授权服务(9951)配置授权认证的配置类 AuthorizationServerConfig 就是在之前已有的tokenServices方法上加入jwt的令牌规则;
@Autow