【OAuth2】十六、Spring Authorization Server如何生成并发放token的
这里写目录标题
前言
一、OAuth2TokenEndpointConfigurer
1、关于authenticationProvider和authenticationProviders自定义的注意
二、Token的生成
1、OAuth2TokenGenerator的初始化
1.1、JwtGenerator的初始化
1.2、定义JWT的header和claims
1.3、claimsOAuth2AccessTokenGenerator的初始化
1.4、OAuth2RefreshTokenGenerator的初始化
1.4、DelegatingOAuth2TokenGenerator
2、小结
三、OAuth2TokenEndpointFilter-token端点过滤器
1、OAuth2TokenEndpointFilter的类结构
2、DelegatingAuthenticationConverter参数提取
2.1、授权码模式
2.2、刷新token模式
2.3、客户端凭据模式
四、Token的认证
1、token认证的三个方式
2、认证成功处理
2.1 DefaultOAuth2AccessTokenResponseMapConverter
3、小结
五、AuthenticationProvider
1、OAuth2AuthorizationCodeAuthenticationProvider
2、OAuth2RefreshTokenAuthenticationProvider
3、 OAuth2ClientCredentialsAuthenticationProvider
4、总结流程
附OAuth2Authorization样例
前言
首先了解的人肯定知道 这个**/oauth2/token**路径是用来申请token的,那那么他是怎么生效的和怎么配置的呢
一、OAuth2TokenEndpointConfigurer
OAuth2TokenEndpointConfigurer用来配置Spring Authorization Server的OAuth2TokenEndpointFilter过滤器,这个过滤器用来处理客户端发来的/oauth2/token(默认)请求。配置项有以下五个:
其中requestMatcher需要通过ProviderSettings自定义,这里并没有自定义入口。
1、关于authenticationProvider和authenticationProviders自定义的注意
自定义accessTokenRequestConverter的话,就意味着你修改了默认的配置。而默认的配置是一个委托类,包含了三种策略(参见上图)。如果你的自定义配置没有适配这三种授权方式,将会失去对这三种方式的支持。
一旦你通过OAuth2TokenEndpointConfigurer#authenticationProvider(AuthenticationProvider)方法进行了自定义,默认提供的三种AuthenticationProvider也将自动失效。
二、Token的生成
OAuth2TokenGenerator是所有类型Token生成器的抽象。 目前有以下几个实现
OAuth2TokenGenerator的配置也是在这里完成的。那么它是从哪里初始化的呢?
1、OAuth2TokenGenerator的初始化
OAuth2TokenGenerator的初始化是借助于工具类OAuth2ConfigurerUtils的静态方法getTokenGenerator来生成。源码如下:
这里采用了单例懒加载设计:
1、先从SharedObject中获取,如果有就直接返回了。
2、如果SharedObject中没有就从Spring IoC中找找,再没有就开始初始化一个,初始化的逻辑专门分析,这里你把它当作黑盒,可以不打断你的思路。
3、初始化成功后,再放入SharedObject,下次再拿直接就有了。
1.1、JwtGenerator的初始化
上面初始化的步骤
你会发现它初始化的范式和上面OAuth2TokenGenerator差不多。优先从SharedObject中获取,没有就看看Spring IoC中有没有JwtEncoder或者JWKSource,有就能初始化一个JwtGenerator,无论有没有都会返回。
1.2、定义JWT的header和claims
这里有一个很好玩的东西OAuth2TokenCustomizer,这个是干啥的呢,这个是如果你JWT有自定义需求,主要定义JWT的header和claims,就可以定义一个该类型的Spring Bean就可以了。
@Bean
public OAuth2TokenCustomizer jwtTokenCustomizer(){
return context -> {
Authentication principal = context.getPrincipal();
OAuth2Authorization authorization = context.getAuthorization();
Set authorizedScopes = context.getAuthorizedScopes();
Authentication authorizationGrant = context.getAuthorizationGrant();
ProviderContext providerContext = context.getProviderContext();
RegisteredClient registeredClient = context.getRegisteredClient();
// 上面的都可以拿到
// 目的是为了定制jwt 的header 和 claims
JoseHeader.Builder headers = context.getHeaders();
context.getClaims().audience(Arrays.asList(“client1”,“client2”))
.claim(“some”,“any”);
};
}
1.3、claimsOAuth2AccessTokenGenerator的初始化
这个OAuth2AccessTokenGenerator其实就是个兜底的,它只能生成不透明令牌,如果JwtGenerator不存在,它就“扶正”了。你如果不喜欢使用JWT,就不要让JwtGenerator初始化。
类似于JwtGenerator的自定义接口OAuth2TokenCustomizer,OAuth2AccessTokenGenerator也有一个自定义接口OAuth2TokenCustomizer,这两个的用法非常类似,就不再赘述了。
1.4、OAuth2RefreshTokenGenerator的初始化
最后也会初始化一个刷新Token的生成器OAuth2RefreshTokenGenerator,它是一个不透明令牌。
1.4、DelegatingOAuth2TokenGenerator
最终我们使用的是一个代理委托类,按照策略进行生成。
如果存在JwtGenerator,那就连同OAuth2AccessTokenGenerator和JwtGenerator组装一个代理生成器
如果没有就只有OAuth2AccessTokenGenerator和JwtGenerator。
2、小结
对于其它配置都是老面孔了,AuthenticationSuccessHandler和AuthenticationFailureHandler已经多次提及,在OAuth2TokenEndpointFilter中都提供了默认实现,如果不满足需要可自行扩展,这里就不再赘述。下面我们会对OAuth2TokenEndpointFilter进行一个简单的分析和实践
三、OAuth2TokenEndpointFilter-token端点过滤器 1、OAuth2TokenEndpointFilter的类结构
该过滤器时在OAuth2TokenEndpointConfigurer中添加
OAuth2TokenEndpointFilter的属性字段,可以很明显的看出来默认的拦截端点
OAuth2TokenEndpointFilter的类图
它会根据不同的授权方式AuthorizationGrantType(目前只支持authorization_code(授权码)、refresh_token(刷新)、client_credentials(客户)端三种授权方式)用不同策略提取请求中的授权信息
文章转自:【OAuth2】十六、Spring Authorization Server如何生成并发放token的_Java-答学网
作者:答学网,转载请注明原文链接:http://www.dxzl8.com/
【OAuth2】十六、Spring Authorization Server如何生成并发放token的相关推荐
- 【spring authorization server系列教程】(一)入门系列,spring authorization server简介。快速构建一个授权服务器(基于最新版本0.3.0)
系列文章目录 [spring authorization server系列教程](一)入门系列,快速构建一个授权服务器 文章目录 系列文章目录 前言 一.目前已实现的功能 二.入门,一步一步快速开始构 ...
- Spring Authorization Server入门 (三) 集成流程说明、细节补充和各种方式获取token测试
1. Spring boot 与Spring authorization Server集成流程说明 1. 创建项目 2. 添加依赖 3. 初始化数据库(用户授权确认表.用户认证信息表和客户端信息表) ...
- Spring官宣新家族成员:Spring Authorization Server!
8月17日,Spring官方宣布 Spring Authorization Server 已正式脱离实验状态,并进入Spring-Project家族! 官方声明 此举恰逢本周的 0.2.0 版本发布, ...
- 前沿资讯|Spring Native 0.11.2、Spring Authorization Server 0.2.2 发布
近日,Spring官方又更新了两个前沿内容,分别是Spring Native 0.11.2 和Spring Authorization Server 0.2.2 .下面一起来看看分别都更新了些什么. ...
- 授权服务框架Spring Authorization Server的过滤器链
上一篇我们初次体验了Spring Authorization Server,很多粉丝都希望对这个新授权框架有进一步了解.所以今天我们再进一步再从配置上来了解和OAuth2.0授权服务器相关的过滤器,进 ...
- 全新的Spring Authorization Server快速入门
11月8日Spring官方已经强烈建议使用Spring Authorization Server替换已经过时的Spring Security OAuth2.0[1],距离Spring Security ...
- Spring 官方发起Spring Authorization Server 项目
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | 公众号「小胖哥」 Spring官方在近日发布了 ...
- 对抗生成网络学习(十六)——stackGAN++利用文字生成鸟类图片(tensorflow实现)(未完待续)
一.背景 最近工作逐渐步入正轨,自己要做一个文字和图像的交互,所以就考虑先做做类似的工作,恰好之前有看到过stackGAN,因此这次就做做stcakGAN++. stackGAN其实发布的比较早,st ...
- 【图文详解】搭建 Spring Authorization oauth2-server-resource-client-gateway-eureka 完整Demo
1.项目概述 1.1.概述 本项目是在前面章节的基础上,进行的升级改造.增加了注册中心.网关,更加贴近于实际需求. 在进行本节之前,请先搭建前面项目: [图文详解]搭建 Spring Authoriz ...
最新文章
- 大数据与测试测量的结合
- PHP开发经常遇到的几个错误
- java 开票金额拆分_关于开票尾差拆分凑整的算法问题
- CKEditor5 基本使用
- 算法---字符串顺序平移
- Sentinel(七)之网关限流
- Microsoft Enterprise Library 5.0 系列(五) Data Access Application Block
- java打包带有外部jar,Eclipse使用总结——使用Eclipse打包带源码的jar包
- Spring Cloud教程 (二)应用程序上下文服务层次结构
- 鸿蒙系统可以安装teams吗,鸿蒙致命弱点被曝光!不能装这个软件,80%用户将望而却步!...
- 如何安装suse linux操作系统,SUSE Linux Enterprise Server 11 SP3安装教程详解
- cad立面索引符号 规范_园林景观设计规范,你不可或缺的真干货
- oracle临时表空间占用率过高,ORACLE 临时表空间使用率过高的原因及解决方案
- 学生信息管理系统软件测试计划,学生信息管理系统软件测试计划书.doc
- 再见面试官:单例模式有几种写法?
- IT安全面试问题汇总
- 将国际标准时间和时间戳转换成年月日时分秒
- 程序员如何快速上手一个自己不太熟悉的新项目
- Cutting Sticks
- FreeRTOS学习笔记【一】——初识FreeRTOS
热门文章
- 达内科技面临真“退市”:5年财务造假6个亿,韩少云持股31%
- 3.5英寸硬盘Caviar完全分解(硬盘构造再揭秘之三)
- php 读取图片bgr,OpenCV读取图像为BGR
- 基于多向梯度局部对比度的红外弱小目标检测算法(MDWCM)解析及代码(2021年IEEE GRSL 论文)
- 验证身份证号码是否为正确值
- 15 爬虫 - Requests 代理(proxies参数)
- U盘文件删除不掉文件被占用360强力删除后变成一串数字--解决办法
- arduino(9):使用ESP8266,连接到RFID RC522 设备上,读取门禁卡上的设备信息
- python web flask开发框架_超好用的Python web开发框架-Flask
- Jetson Xavier NX远程桌面VNC使用