spring security oauth2搭建resource-server demo及token改造成JWT令牌 (3)

:53020/uaa/oauth/check_token?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsicmVzMSJdLCJ1c2VyX25hbWUiOiJ7XCJmdWxsbmFtZVwiOlwiaHl6XCIsXCJpZFwiOlwiMVwiLFwicGFzc3dvcmRcIjpcIiQyYSQxMCRJdm94aUN3eEdXWkdFemxkcVY2bktPcUxuY05zMmNVdkdsQ2ZmZ1V0a2hZaGc4dUo0akd5eVwiLFwidXNlcm5hbWVcIjpcImh5elwifSIsInNjb3BlIjpbImFsbCJdLCJleHAiOjE2Mzk4MTk4ODgsImF1dGhvcml0aWVzIjpbInAxIiwicDMiXSwianRpIjoiNDAzNWU3NTItNmYzNS00Y2RhLTg0ZTgtNjEyZmFhZWI2OWFkIiwiY2xpZW50X2lkIjoiYzEifQ.VIzqACiYJ-ZCTrq1BkOM_HeXkTwE9tAZ3TSiy7B9pJ4

确实访问了在上面实例中的client相关信息:

{ "aud": [ "res1" ], "user_name": "{\"fullname\":\"hyz\",\"id\":\"1\",\"password\":\"$2a$10$IvoxiCwxGWZGEzldqV6nKOqLncNs2cUvGlCffgUtkhYhg8uJ4jGyy\",\"username\":\"hyz\"}", "scope": [ "all" ], "exp": 1639819888, "authorities": [ "p1", "p3" ], "jti": "4035e752-6f35-4cda-84e8-612faaeb69ad", "client_id": "c1" }

​ 由此可见,基于JWT的改造已经完成。

2、修改资源服务检验令牌配置

资源服务需要和授权服务拥有一致的签字、令牌服务等:

将认证服务中的TokenConfig类拷贝到资源 服务中

将授权服务中的TokenConfig类拷贝到资源 服务中

public class ResouceServerConfig extends ResourceServerConfigurerAdapter { public static final String RESOURCE_ID = "res1"; @Autowired private TokenStore tokenStore; //资源服务令牌解析服务 // @Bean // public ResourceServerTokenServices tokenService() { // //使用远程服务请求授权服务器校验token,必须指定校验token 的url、client_id,client_secret // RemoteTokenServices service=new RemoteTokenServices(); // service.setCheckTokenEndpointUrl("http://localhost:53020/uaa/oauth/check_token"); // service.setClientId("c1"); // service.setClientSecret("secret"); // return service; // } @Override public void configure(ResourceServerSecurityConfigurer resources) { resources.resourceId(RESOURCE_ID) .tokenStore(tokenStore); } }

验证令牌是否有效

​ 我们再次使用上面基于JWT生成的令牌去访问资源服务:

spring security oauth2搭建resource-server demo及token改造成JWT令牌

​ 由上图可知是可以正常访问的,如果该令牌有误,则会返回

{ "error": "invalid_token", "error_description": "Cannot convert access token to JSON" }

​ 到这里,本篇就结束了,我们总结一下:

使用基本的token,需要去认证中心验证token是否有效等,在高并发时会有性能问题

令牌改成JWT格式,解决了性能问题,当然也可以考虑将令牌存放在redis中也可以解决性能问题

本文栗子中使用对称加密的JWT令牌,生产环境肯定是使用非对称加密的密钥对(如何配置,童鞋们可以实践一下)

​ spring security相关的内容就写到这里,在spring security 及Oauth2的源码中发现了许多不明白的地方,之前spring的源码由粗略看到一部分,现在觉得还是需要再回头看看spring源码,所以后续会分享spring源码的章节。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwfgyy.html