聊聊微服务认证之Oauth2的jwt
聊聊微服务认证之Oauth2的jwt
上篇文章我们讲了有状态的认证方式,我们每个资源服务器都需要到认证服务器进行认证,如果资源服务器很多的话,就会对认证服务器造成一定的压力,而jwt就能解决这个问题,我们使用有状态的认证方式生成的token是随机字符串,而使用jwt可以生成的token携带用户信息,这样资源服务器不用通过认证服务器,自己就可以解析认证,从而减小认证服务器的压力。
jwt三部分组成:头信息,负载和签名,头信息中保存着使用的算法,负载中存的是用户信息,签名是为了防止信息不篡改的。
资源服务器的jwt改造
把之前重写configure(ResourceServerSecurityConfigurer resources)请求认证服务器的逻辑改造为
resources.resourceId("xiepanpan").tokenStore(tokenStore()).stateless(true);
tokenStore()可以看下面的配置,和认证服务器的配置一样,stateless表示无状态,之前的逻辑变成了这么简单的一行
认证服务器的jwt改造
把之前重写的configure(AuthorizationServerEndpointsConfigurer endpoints)方法的tokenStore改为JwtTokenStore的实现
public TokenStore tokenStore() {
return new JwtTokenStore(jwtAccessTokenConverter());
}
同时我们设定jwt令牌转换器来生成jwt令牌
public JwtAccessTokenConverter jwtAccessTokenConverter() {
JwtAccessTokenConverter jwtAccessTokenConverter = new JwtAccessTokenConverter();
jwtAccessTokenConverter.setSigningKey(sign_key);
jwtAccessTokenConverter.setVerifier(new MacSigner(sign_key));
return jwtAccessTokenConverter;
}
分别是设置签名的key 验证的加密key
从上面的配置我们可以看出来,在认证服务器和资源服务器中都存了一份token信息,并且资源服务器不需要在取调用认证服务器进行认证了,而是自身验证
jWT的字段扩展
资源服务器
这里进行扩展认证,MyAccessTokenConverter继承DefaultAccessTokenConverter类重写extractAuthentication()方法进行扩展认证
@Override
public OAuth2Authentication extractAuthentication(Map<String, ?> map) {
OAuth2Authentication oAuth2Authentication = super.extractAuthentication(map);
oAuth2Authentication.setDetails(map);
return oAuth2Authentication;
}
这里把map信息放入OAuth2Authentication中来进行认证处理
认证服务器
MyAccessTokenConverter继承DefaultAccessTokenConverter类重写convertUserAuthentication()方法
public Map<String, ?> convertUserAuthentication(Authentication authentication) {
Map<String, Object> response = new LinkedHashMap();
response.put("nickname", authentication);
return response;
}
nickname为扩展字段,然后把这个类添设置到jwtAccessTokenConverter中:
jwtAccessTokenConverter.setAccessTokenConverter(MyAccessTokenConverter);
总结
这篇文章我们讲了基于oauth2的jwt的配置和扩展配置的功能,jwt减轻了认证服务器的负担,让资源服务器本身存储token信息,而字符服务器就可以进行校验token信息是否被篡改,无需远程请求认证服务器,对于jwt的使用,我感觉用的公司还是比较少,因为一般的公司还涉及不到认证服务器压力很大的情况,另外jwt的安全性也是另一方面的考量因素
- 点赞
- 收藏
- 关注作者
评论(0)