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

相关文章

Java中的登录技术保姆级详细教程

《Java中的登录技术保姆级详细教程》:本文主要介绍Java中登录技术保姆级详细教程的相关资料,在Java中我们可以使用各种技术和框架来实现这些功能,文中通过代码介绍的非常详细,需要的朋友可以参考... 目录1.登录思路2.登录标记1.会话技术2.会话跟踪1.Cookie技术2.Session技术3.令牌技

Spring Security介绍及配置实现代码

《SpringSecurity介绍及配置实现代码》SpringSecurity是一个功能强大的Java安全框架,它提供了全面的安全认证(Authentication)和授权(Authorizatio... 目录简介Spring Security配置配置实现代码简介Spring Security是一个功能强

8种快速易用的Python Matplotlib数据可视化方法汇总(附源码)

《8种快速易用的PythonMatplotlib数据可视化方法汇总(附源码)》你是否曾经面对一堆复杂的数据,却不知道如何让它们变得直观易懂?别慌,Python的Matplotlib库是你数据可视化的... 目录引言1. 折线图(Line Plot)——趋势分析2. 柱状图(Bar Chart)——对比分析3

spring security 超详细使用教程及如何接入springboot、前后端分离

《springsecurity超详细使用教程及如何接入springboot、前后端分离》SpringSecurity是一个强大且可扩展的框架,用于保护Java应用程序,尤其是基于Spring的应用... 目录1、准备工作1.1 引入依赖1.2 用户认证的配置1.3 基本的配置1.4 常用配置2、加密1. 密

SpringBoot后端实现小程序微信登录功能实现

《SpringBoot后端实现小程序微信登录功能实现》微信小程序登录是开发者通过微信提供的身份验证机制,获取用户唯一标识(openid)和会话密钥(session_key)的过程,这篇文章给大家介绍S... 目录SpringBoot实现微信小程序登录简介SpringBoot后端实现微信登录SpringBoo

Android实现一键录屏功能(附源码)

《Android实现一键录屏功能(附源码)》在Android5.0及以上版本,系统提供了MediaProjectionAPI,允许应用在用户授权下录制屏幕内容并输出到视频文件,所以本文将基于此实现一个... 目录一、项目介绍二、相关技术与原理三、系统权限与用户授权四、项目架构与流程五、环境配置与依赖六、完整

Android实现定时任务的几种方式汇总(附源码)

《Android实现定时任务的几种方式汇总(附源码)》在Android应用中,定时任务(ScheduledTask)的需求几乎无处不在:从定时刷新数据、定时备份、定时推送通知,到夜间静默下载、循环执行... 目录一、项目介绍1. 背景与意义二、相关基础知识与系统约束三、方案一:Handler.postDel

Spring Security自定义身份认证的实现方法

《SpringSecurity自定义身份认证的实现方法》:本文主要介绍SpringSecurity自定义身份认证的实现方法,下面对SpringSecurity的这三种自定义身份认证进行详细讲解,... 目录1.内存身份认证(1)创建配置类(2)验证内存身份认证2.JDBC身份认证(1)数据准备 (2)配置依

Spring Security+JWT如何实现前后端分离权限控制

《SpringSecurity+JWT如何实现前后端分离权限控制》本篇将手把手教你用SpringSecurity+JWT搭建一套完整的登录认证与权限控制体系,具有很好的参考价值,希望对大家... 目录Spring Security+JWT实现前后端分离权限控制实战一、为什么要用 JWT?二、JWT 基本结构

Java 正则表达式URL 匹配与源码全解析

《Java正则表达式URL匹配与源码全解析》在Web应用开发中,我们经常需要对URL进行格式验证,今天我们结合Java的Pattern和Matcher类,深入理解正则表达式在实际应用中... 目录1.正则表达式分解:2. 添加域名匹配 (2)3. 添加路径和查询参数匹配 (3) 4. 最终优化版本5.设计思