当前位置:网站首页>【OAuth2】十四、OAuth2授权端点配置类OAuth2AuthorizationEndpointConfigurer和OAuth2AuthorizationEndpointFilter
【OAuth2】十四、OAuth2授权端点配置类OAuth2AuthorizationEndpointConfigurer和OAuth2AuthorizationEndpointFilter
2022-08-05 17:17:00 【北城小林】
前面分析的几个过滤器都没有自己专属的配置类,Spring Authorization Server剩下的过滤器都有自己专属的配置类。授权端点过滤器OAuth2AuthorizationEndpointFilter的配置类为OAuth2AuthorizationEndpointConfigurer
一、OAuth2AuthorizationEndpointConfigurer
OAuth2AuthorizationEndpointConfigurer是由OAuth2AuthorizationServerConfigurer初始化的。主要用来初始化OAuth2AuthorizationEndpointFilter

1、requestMatcher
RequestMatcher类型,应该大家都很熟悉了,用来封装授权端点的拦截规则。路径需要匹配ProviderSettings的authorizationEndpoint属性。
2、authorizationRequestConverter
其类型为AuthenticationConverter。如果我们自定义这个配置项则会覆盖OAuth2AuthorizationEndpointFilter中默认的OAuth2AuthorizationCodeRequestAuthenticationConverter。
3、AuthenticationConverter
用于从HttpServletRequest转换为特定类型的Authentication(这里为OAuth2AuthorizationCodeRequestAuthenticationToken)的策略。后续由AuthenticationManager对Authentication进行认证。如果认证结果为null,则表示不适合当前的身份验证尝试;如果从HttpServletRequest转换失败,也可以在convert方法中抛出AuthenticationException 。
4、authenticationProviders
一般一种Authentication对应一种AuthenticationProvider。这里设计为一个集合,目的应该是要对OAuth2AuthorizationCodeRequestAuthenticationToken支持多种自定义认证策略。默认值为OAuth2AuthorizationCodeRequestAuthenticationProvider。
5、authorizationResponseHandler
类型为AuthenticationSuccessHandler, 这个应该都不陌生。这里用来自定义授权通过的逻辑。
6、errorResponseHandler
类型为AuthenticationFailureHandler,同样不陌生。当授权过程中发生了OAuth2AuthenticationException异常就通过该处理器处理。
7、consentPage
配置自定义授权确认页面,可以配置绝对请求路径。默认由内部的DefaultConsentPage实现。这个将作为专题进行讲解。
8、如何自定义这些配置项
需要借助于OAuth2AuthorizationServerConfigurer.authorizationEndpoint方法进行DSL风格的配置,详细可深入了解org.springframework.security.config.Customizer。
Spring Security的很多配置类都可以借助于此方式进行自定义,之前已经有所介绍,这里再重提一下。
我们在上一篇中讲解了Spring Authorization Server中的今天我们来深入了解
二、OAuth2AuthorizationEndpointFilter。
OAuth2AuthorizationEndpointFilter,是由OAuth2AuthorizationEndpointConfigurer配置的
它的配置项都来自配置类OAuth2AuthorizationEndpointConfigurer,已经在上一篇文章中讲解过了,这里着重了解它的流程逻辑。
1、路径匹配规则
三种匹配规则。相关的源码如下:
- 1、 如果是GET请求会被认为是普通的授权请求,就像前面DEMO一样,只要是GET请求,符合URI就会被OAuth2AuthorizationEndpointFilter拦截。
- 如果是POST请求则分为两种情况:
- 2、 必须是OIDC请求,和①不冲突,OIDC请求必须携带scope为openid而且必须包含参数response_type。
- 3、请求确认页面的表单Action请求,即授权用户确认页的请求,只要求response_type参数不能为null。

- 3、请求确认页面的表单Action请求,即授权用户确认页的请求,只要求response_type参数不能为null。
2、过滤器逻辑

- 1、先进行路径匹配,不匹配则跳出当前过滤器。
- 2、路径匹配后,会通过AuthenticationConverter将HttpServletRequest转换为OAuth2AuthorizationCodeRequestAuthenticationToken。
- 3、OAuth2AuthorizationCodeRequestAuthenticationToken交给AuthenticationManager进行认证,具体由OAuth2AuthorizationCodeRequestAuthenticationProvider负责认证。
- 4、如果步骤③的认证没有通过则跳出当前过滤器。
- 5、如果步骤③的认证需要用户再次确认,就通过sendAuthorizationConsent跳转到确认页面,详细参见后面的自定义授权确认页面实战。
- 6、如果不需要用户再次确认则交给认证成功处理器处理后续的逻辑。
- 7、如果在步骤②到步骤⑥的过程中发生OAuth2AuthenticationException异常,则由AuthenticationFailureHandler处理认证失败逻辑。
这里策略非常多,十分复杂,更好的学习方法是多DEBUGOAuth2AuthorizationEndpointFilter。
边栏推荐
- 文末送书 | CCF优秀博士论文丛书:搜索引擎中的实体推荐关键技术研究
- TOP-TITLE
- App与Hap、Entry与feature,bundleName与packge,务必弄明白
- The Chinese Valentine's Day is coming, it's time to show the romance exclusive to programmers
- Mapping of gpnmb+ gpnmb- AT2 cells on idling Mapping----version 3.2.2seurat
- 华为计算开源总经理堵俊平:AI领域开源新趋势与思考
- 图像处理:坐标变换
- Stored Procedure && Trigger
- Problems encountered in CDH operation and maintenance
- 【历史上的今天】8 月 5 日:微信 5.0 发布;百度上市;LinkedIn 创始人诞生
猜你喜欢
随机推荐
WPF 截图控件之移除控件(九)「仿微信」
SELECT
【无标题】
备份阿里云数据库到本地数据库
数学建模文写作----个人笔记
Software testing high or developers to pay high salary?
程序员表白代码来了!太秀了。。
【Untitled】
电脑系统安装后桌面图标隔开很宽怎么调?
每日一题(1)—— 最大连号
如何选择产品经理课程?
TABLE
从零开始Blazor Server(8)--增加菜单以及调整位置
Stream stream detailed
Shell自动化编程初识
[Case] A rotating circle in 3d transformation
DIV
rpm打包
和我一起学习自动化运维
你也搞Web3 先回答以下13问再找我谈Web3









![[Knowledge] How much do you know about LiDAR point cloud data?](/img/78/5b14d4b777d60a345b5441ecfac1f3.png)