Spring security 4.x 往 5.x 升级的坑 (OAuth2)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring security 4.x 往 5.x 升级的坑 (OAuth2)相关的知识,希望对你有一定的参考价值。

参考技术A

最近在搭建新的后台技术架构,其中旧系统使用 Spring security 4.2.1, 准备迁移到 Spring security 5.X,遇到的坑记录一下,以下将 Spring security 简称为 SS

Server 端 & client 端

原因 :由于SS5为提高安全性,salt已由ss内部实现自动为密码生成salt,在生成出来的密码中已经包含salt内容,所以不再开发人员传入salt参数。
解决方案 :查看了SS4.X版本发现其提供的salt实际上是往需加密的内容最后追加字符串 salt 实现,所以实现上建议写一个类进行处理

使用方法(单元测试):

如微服务之间使用FeignClient进行接口调用(如微服务A调用微服务B),此时需要在微服务A中进行oauth2 的header 转发,否则微服务A默认不会将客户端的HEADER传递到下一个微服务,实现方法如下:

Spring Security 实战内容:OAuth2授权回调的处理机制

1. 前言

当用户发起第三方授权请求是如何初始化OAuth2AuthorizationRequest授权请求对象以及如何通过过滤器进行转发到第三方的。今天我们接着这个流程往下走,来看看服务器收到授权请求是怎么做的。

2. OAuth2登录认证

当第三方收到OAuth2授权请求后,会将授权的回执通过我方提供的回调请求redirect_uri传递给我们。由于默认情况下回调的路径满足/login/oauth2/code/*,所以我们只要找到拦截回调的过滤器就可以知道Spring Security是如何处理回调了。通过搜索确认了OAuth2LoginAuthenticationFilter就是处理回调的过滤器。

OAuth2LoginAuthenticationFilter

第三方认证服务器在调用redirect_uri时附加codestate参数,在被这个Filter拦截后,创建一个待认证凭据OAuth2LoginAuthenticationToken,并委托给了AuthenticationManager进行身份验证。

一旦成功验证,则生成认证凭据OAuth2AuthenticationToken和认证客户端对象OAuth2AuthorizedClient。 最后, OAuth2AuthenticationToken返回,并最终存储在SecurityContextRepository完成认证处理;而OAuth2AuthorizedClient被保存到OAuth2AuthorizedClientRepository。流程图如下:

这个过滤器和UsernamePasswordAuthenticationFilter一样继承了AbstractAuthenticationProcessingFilter,流程有相像的地方。

3. 总结

当第三方授权后会通过回调来通知客户端,而客户端收到回调通知后会对授权结果进行认证操作才能表明这一套流程是合规的。而这个流程是由过滤器OAuth2LoginAuthenticationFilter来控制的。

愿与诸君共进步,大量的面试题及答案还有资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系
可以进交流群124388967获取,最后祝大家都能拿到自己心仪的offer

以上是关于Spring security 4.x 往 5.x 升级的坑 (OAuth2)的主要内容,如果未能解决你的问题,请参考以下文章

Spring Security 4.x -; 5.x 踩坑记录

Spring Security 4.x -; 5.x 踩坑记录

如何使用xml在spring security中禁用注销确认?

Spring Boot 1.5.x 与 Hibernate 4.x 的兼容性

Spring-Cloud的版本是如何定义的

基本springboot 2.0版本 spring-cloud的使用