services.setTokenEnhancer(jwtAccessTokenConverter);
4、令牌访问端点添加tokenServices
在AuthorizationServerEndpointsConfigurer中添加这个令牌服务,代码如下:
好了,至此认证中心的JWT令牌生成方式配置完成了.........
案例源码已经上传GitHub,关注公号:码猿技术专栏,回复关键词 9529 获取!
OAuth2.0资源服务搭建
资源服务搭建非常简单了,配置一个JWT令牌校验服务即可。
1、案例架构
新建一个oauth2-auth-resource-jwt模块,目录如下:
2、令牌配置
直接复用授权服务的AccessTokenConfig,由于资源服务需要校验解析JWT令牌,因此直接复用即可,代码如下:
注意:这里的JWT加密的秘钥一定要和认证中心的一样。
3、配置令牌服务
生成的ResourceServerTokenServices对象,其中使用JWT令牌增强,如下:
4、资源ID和令牌校验服务配置
将资源id和令牌服务配置到ResourceServerSecurityConfigurer中,代码如下:
由于使用了JWT这种透明令牌,令牌本身携带着部分用户信息,因此不需要通过远程调用认证中心的接口校验令牌。
案例源码已经上传GitHub,关注公号:码猿技术专栏,回复关键词 9529 获取!
下面通过获取令牌、调用资源进行测试逻辑是否走通。
1、使用密码模式获取令牌
POSTMAN请求如下:
可以看到已经成功返回了JWT令牌。
2、携带令牌调用资源服务
直接拿着获取的access_token调用资源服务的接口,请求如下:
好了,JWT令牌测试成功............
源码中最重要的部分当然是获取令牌、校验令牌这两个流程了,小陈某下面详细说说。
1、获取令牌
获取令牌就比较简简单了,当然从接口 /oauth/token入手了,这个接口在TokenEndpoint#postAccessToken()
方法中,如下图:
这个方法中有两个关键步骤,如下:
1、根据clientId加载客户端信息
这一步是从根据客户端传入的clientId获取客户端的详细信息,代码如下:
ClientDetails authenticatedClient = getClientDetailsService().loadClientByClientId(clientId);
这里的ClientDetailsService有两类,如下:
InMemoryClientDetailsService:客户端配置存储在内存中,本篇文章所使用的便是这个
JdbcClientDetailsService:客户端配置存储在数据库中,后续文章介绍。
2、生成OAuth2AccessToken返回客户端
OAuth2AccessToken是封装的返回对象,/oauth/token这个接口的作用就是将令牌封装到OAuth2AccessToken返回,代码如下:
OAuth2AccessToken token = getTokenGranter().grant(tokenRequest.getGrantType(), tokenRequest);
getTokenGranter():获取授权类型,比如密码类型、授权码类型
grant():这个方法则是真正的业务方法,其中调用DefaultTokenServices#createAccessToken() 方法生成令牌。
DefaultTokenServices这个还记得吗,令牌服务,在AuthorizationServerConfig配置文件配置的,如下:
createAccessToken()方法内部真正的业务方法其实是JwtAccessTokenConverter#enhance(),内部生成JWT令牌,封装进入OAuth2AccessToken对象返回,方法如下:
JwtAccessTokenConverter这个还记得吗?令牌增强类,在AccessTokenConfig这个配置文件中配置的,如下:
主流程图如下:
2、校验令牌
校验令牌的更加简单了,入口就在OAuth2AuthenticationProcessingFilter这个过滤器,内部会调用OAuth2AuthenticationManager中的authenticate()方法进行验证令牌。
校验主流程如下:
自己debug跟着源码试试吧............
案例源码已经上传GitHub,关注公号:码猿技术专栏,回复关键词 9529 获取!
最后说一句(别白嫖,求关注)
陈某每一篇文章都是精心输出,已经写了3个专栏,整理成PDF,获取方式如下:
《Spring Cloud 进阶》PDF:关注公号:【码猿技术专栏】回复关键词 Spring Cloud 进阶 获取!
《Spring Boot 进阶》PDF:关注公号:【码猿技术专栏】回复关键词 Spring Boot进阶 获取!
《Mybatis 进阶》PDF:关注公号:【码猿技术专栏】回复关键词 Mybatis 进阶 获取!
如果这篇文章对你有所帮助,或者有所启发的话,帮忙点赞、在看、转发、收藏,你的支持就是我坚持下去的最大动力!
本文来自博客园,作者:不才陈某,转载请注明原文链接:https://www.cnblogs.com/cbvlog/p/15655009.html
欢迎关注个人公众号:码猿技术专栏