这里写目录标题
前言
一、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的相关推荐

  1. 【spring authorization server系列教程】(一)入门系列,spring authorization server简介。快速构建一个授权服务器(基于最新版本0.3.0)

    系列文章目录 [spring authorization server系列教程](一)入门系列,快速构建一个授权服务器 文章目录 系列文章目录 前言 一.目前已实现的功能 二.入门,一步一步快速开始构 ...

  2. Spring Authorization Server入门 (三) 集成流程说明、细节补充和各种方式获取token测试

    1. Spring boot 与Spring authorization Server集成流程说明 1. 创建项目 2. 添加依赖 3. 初始化数据库(用户授权确认表.用户认证信息表和客户端信息表) ...

  3. Spring官宣新家族成员:Spring Authorization Server!

    8月17日,Spring官方宣布 Spring Authorization Server 已正式脱离实验状态,并进入Spring-Project家族! 官方声明 此举恰逢本周的 0.2.0 版本发布, ...

  4. 前沿资讯|Spring Native 0.11.2、Spring Authorization Server 0.2.2 发布

    近日,Spring官方又更新了两个前沿内容,分别是Spring Native 0.11.2 和Spring Authorization Server 0.2.2 .下面一起来看看分别都更新了些什么. ...

  5. 授权服务框架Spring Authorization Server的过滤器链

    上一篇我们初次体验了Spring Authorization Server,很多粉丝都希望对这个新授权框架有进一步了解.所以今天我们再进一步再从配置上来了解和OAuth2.0授权服务器相关的过滤器,进 ...

  6. 全新的Spring Authorization Server快速入门

    11月8日Spring官方已经强烈建议使用Spring Authorization Server替换已经过时的Spring Security OAuth2.0[1],距离Spring Security ...

  7. Spring 官方发起Spring Authorization Server 项目

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | 公众号「小胖哥」 Spring官方在近日发布了 ...

  8. 对抗生成网络学习(十六)——stackGAN++利用文字生成鸟类图片(tensorflow实现)(未完待续)

    一.背景 最近工作逐渐步入正轨,自己要做一个文字和图像的交互,所以就考虑先做做类似的工作,恰好之前有看到过stackGAN,因此这次就做做stcakGAN++. stackGAN其实发布的比较早,st ...

  9. 【图文详解】搭建 Spring Authorization oauth2-server-resource-client-gateway-eureka 完整Demo

    1.项目概述 1.1.概述 本项目是在前面章节的基础上,进行的升级改造.增加了注册中心.网关,更加贴近于实际需求. 在进行本节之前,请先搭建前面项目: [图文详解]搭建 Spring Authoriz ...

最新文章

  1. 大数据与测试测量的结合
  2. PHP开发经常遇到的几个错误
  3. java 开票金额拆分_关于开票尾差拆分凑整的算法问题
  4. CKEditor5 基本使用
  5. 算法---字符串顺序平移
  6. Sentinel(七)之网关限流
  7. Microsoft Enterprise Library 5.0 系列(五) Data Access Application Block
  8. java打包带有外部jar,Eclipse使用总结——使用Eclipse打包带源码的jar包
  9. Spring Cloud教程 (二)应用程序上下文服务层次结构
  10. 鸿蒙系统可以安装teams吗,鸿蒙致命弱点被曝光!不能装这个软件,80%用户将望而却步!...
  11. 如何安装suse linux操作系统,SUSE Linux Enterprise Server 11 SP3安装教程详解
  12. cad立面索引符号 规范_园林景观设计规范,你不可或缺的真干货
  13. oracle临时表空间占用率过高,ORACLE 临时表空间使用率过高的原因及解决方案
  14. 学生信息管理系统软件测试计划,学生信息管理系统软件测试计划书.doc
  15. 再见面试官:单例模式有几种写法?
  16. IT安全面试问题汇总
  17. 将国际标准时间和时间戳转换成年月日时分秒
  18. 程序员如何快速上手一个自己不太熟悉的新项目
  19. Cutting Sticks
  20. FreeRTOS学习笔记【一】——初识FreeRTOS

热门文章

  1. 达内科技面临真“退市”:5年财务造假6个亿,韩少云持股31%
  2. 3.5英寸硬盘Caviar完全分解(硬盘构造再揭秘之三)
  3. php 读取图片bgr,OpenCV读取图像为BGR
  4. 基于多向梯度局部对比度的红外弱小目标检测算法(MDWCM)解析及代码(2021年IEEE GRSL 论文)
  5. 验证身份证号码是否为正确值
  6. 15 爬虫 - Requests 代理(proxies参数)
  7. U盘文件删除不掉文件被占用360强力删除后变成一串数字--解决办法
  8. arduino(9):使用ESP8266,连接到RFID RC522 设备上,读取门禁卡上的设备信息
  9. python web flask开发框架_超好用的Python web开发框架-Flask
  10. Jetson Xavier NX远程桌面VNC使用