Security OAuth2 SSO单点登录源码剖析ing...(二)

2024-05-26 21:52

本文主要是介绍Security OAuth2 SSO单点登录源码剖析ing...(二),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 单点登录简介
  • SSO客户端
    • @EnableOAuth2Sso注解
      • @EnableOAuth2Client注解
      • OAuth2SsoProperties
      • OAuth2SsoDefaultConfiguration
      • OAuth2SsoCustomConfiguration
      • ResourceServerTokenServicesConfiguration
    • 过滤器
      • OAuth2ClientContextFilter
      • OAuth2ClientAuthenticationProcessingFilter
  • SSO服务端

Security OAuth2 SSO单点登录源码剖析 - 自己总结

单点登录简介

SSO客户端

@EnableOAuth2Sso注解

@EnableOAuth2Sso是sso客户端的核心注解,它为sso客户端引入了与单点登录相关的配置。

由该注解引入的配置包括:

  • @EnableOAuth2Client、
  • OAuth2SsoProperties、
  • OAuth2SsoDefaultConfiguration、
  • OAuth2SsoCustomConfiguration、
  • ResourceServerTokenServicesConfiguration

@EnableOAuth2Client注解

使用@Import注解引入了OAuth2ClientConfiguration配置,使用@Bean方式定义了OAuth2ClientContextFilter过滤器,嵌入到Web容器中(注意,是Web容器,并不是security的过滤器链中),当后续的过滤器抛出UserRedirectRequiredException这种类型的异常时,就会让用户重定向到认证中心去做登录。那么,就要保证OAuth2ClientContextFilter过滤器一定是要排在FilterChainProxy的前面的,从【OAuth2授权流程和源码解析】的【FilterChainProxy与其它的web的Filter的顺序】章节,可以知道默认的springSecurityFilterChain的排序值为-100,如果要排在它的前面,那么就需要小于-100,我们可以看到在OAuth2AutoConfiguration自动配置类中引入了OAuth2RestOperationsConfiguration配置类,这个配置类中就注入了上面使用@Bean方式定义的OAuth2ClientContextFilter过滤器,并且使用FilterRegistrationBean将它包装并交给spring容器,注意到它设置的order恰好就是:-100-10 = -100,比-100要小,因此,OAuth2ClientContextFilter排在springSecurityFilterChain的前面是没有问题的。

OAuth2SsoProperties

配置前缀为:security.oauth2.sso,可配置就只是:security.oauth2.sso.login-path = /login

当用户未登录时,访问sso客户端资源,如:http://localhost:1111,抛出认证异常或访问拒绝异常而被异常处理器捕捉到该异常,就会将用户重定向到sso客户端的该路径下,如:http://localhost:1111/login,但此时会让OAuth2ClientAuthenticationProcessingFilter认证过滤器满足此路径匹配要求,因为现在没有任何令牌相关的信息,所以就会抛出UserRedirectRequiredException。而这种类型的异常一旦抛出,就会让OAuth2ClientContextFilter这个过滤器捕捉到,这个OAuth2ClientContextFilter过滤器就会让用户去重定向到认证服务器授权页面去授权:http://localhost:1110/oauth/authorize?client_id=c1&redirect_uri=http://localhost:1111/login&response_type=code&state=Z2Io35

但由于当前用户在认证中心未登录,就会又被认证服务器重定向到认证登录页面,当用户登录完成时,按照OAuth2授权码一般的授权逻辑,就会重定向到授权页面,但这里会由于走自动授权模式,因此就直接重定向到了:http://localhost:1111/login?code=cSdvsL&state=M28wuM,此时就携带了code和state,而一旦拿到了code和state,在OAuth2ClientAuthenticationProcessingFilter过滤器中,就可以按照授权码模式的逻辑获取访问令牌,获取用户信息了

OAuth2SsoDefaultConfiguration

OAuth2SsoCustomConfiguration

ResourceServerTokenServicesConfiguration

过滤器

OAuth2ClientContextFilter

OAuth2ClientAuthenticationProcessingFilter

SSO服务端

这篇关于Security OAuth2 SSO单点登录源码剖析ing...(二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1005688

相关文章

springboot依靠security实现digest认证的实践

《springboot依靠security实现digest认证的实践》HTTP摘要认证通过加密参数(如nonce、response)验证身份,避免明文传输,但存在密码存储风险,相比基本认证更安全,却因... 目录概述参数Demopom.XML依赖Digest1Application.JavaMyPasswo

90%的人第一步就错了! 顺利登录wifi路由器后台的技巧

《90%的人第一步就错了!顺利登录wifi路由器后台的技巧》登录Wi-Fi路由器,其实就是进入它的后台管理页面,很多朋友不知道该怎么进入路由器后台设置,感兴趣的朋友可以花3分钟了解一下... 你是不是也遇到过这种情况:家里网速突然变慢、想改WiFi密码却不知道从哪进路由器、新装宽带后完全不知道怎么设置?别慌

java 恺撒加密/解密实现原理(附带源码)

《java恺撒加密/解密实现原理(附带源码)》本文介绍Java实现恺撒加密与解密,通过固定位移量对字母进行循环替换,保留大小写及非字母字符,由于其实现简单、易于理解,恺撒加密常被用作学习加密算法的入... 目录Java 恺撒加密/解密实现1. 项目背景与介绍2. 相关知识2.1 恺撒加密算法原理2.2 Ja

Nginx屏蔽服务器名称与版本信息方式(源码级修改)

《Nginx屏蔽服务器名称与版本信息方式(源码级修改)》本文详解如何通过源码修改Nginx1.25.4,移除Server响应头中的服务类型和版本信息,以增强安全性,需重新配置、编译、安装,升级时需重复... 目录一、背景与目的二、适用版本三、操作步骤修改源码文件四、后续操作提示五、注意事项六、总结一、背景与

Android实现图片浏览功能的示例详解(附带源码)

《Android实现图片浏览功能的示例详解(附带源码)》在许多应用中,都需要展示图片并支持用户进行浏览,本文主要为大家介绍了如何通过Android实现图片浏览功能,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

深度剖析SpringBoot日志性能提升的原因与解决

《深度剖析SpringBoot日志性能提升的原因与解决》日志记录本该是辅助工具,却为何成了性能瓶颈,SpringBoot如何用代码彻底破解日志导致的高延迟问题,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言第一章:日志性能陷阱的底层原理1.1 日志级别的“双刃剑”效应1.2 同步日志的“吞吐量杀手”

Spring Security 前后端分离场景下的会话并发管理

《SpringSecurity前后端分离场景下的会话并发管理》本文介绍了在前后端分离架构下实现SpringSecurity会话并发管理的问题,传统Web开发中只需简单配置sessionManage... 目录背景分析传统 web 开发中的 sessionManagement 入口ConcurrentSess

Spring Security重写AuthenticationManager实现账号密码登录或者手机号码登录

《SpringSecurity重写AuthenticationManager实现账号密码登录或者手机号码登录》本文主要介绍了SpringSecurity重写AuthenticationManage... 目录一、创建自定义认证提供者CustomAuthenticationProvider二、创建认证业务Us