在Spring Security 实战干货:客户端OAuth2授权请求的入口中我们找到了拦截OAuth2授权请求入口/oauth2/authorization的过滤器OAuth2AuthorizationRequestRedirectFilter,并找到了真正发起OAuth2授权请求的方法sendRedirectForAuthorization。但是这个方法并没有细说,所以今天接着上一篇把这个坑给补上。

2. sendRedirectForAuthorization

这个sendRedirectForAuthorization方法没多少代码,它的主要作用就是向第三方平台进行授权重定向访问。它所有的逻辑都和OAuth2AuthorizationRequest有关,因此我们对OAuth2AuthorizationRequest进行轻描淡写是不行的,我们必须掌握OAuth2AuthorizationRequest是怎么来的,干嘛用的。

OAuth2AuthorizationRequestResolver

这就需要去分析解析类OAuth2AuthorizationRequestResolver,其核心方法有两个重载,这里分析一个就够了。

@Overridepublic OAuth2AuthorizationRequest resolve(HttpServletRequest request) { // registrationId是通过uri路径参数/oauth2/authorization/{registrationId}获得的 String registrationId = this.resolveRegistrationId(request); // 然后去请求对象request中提取key为action的参数,默认值是login String redirectUriAction = getAction(request, "login"); // 然后进入根本的解析方法 return resolve(request, registrationId, redirectUriAction);}

上面方法里面的resolve(request, registrationId, redirectUriAction)方法才是最终从/oauth2/authorization提取OAuth2AuthorizationRequest的根本方法。代码太多但是我尽量通俗易懂的来进行图解。resolve方法会根据不同的授权方式(AuthorizationGrantType)来组装不同的OAuth2AuthorizationRequest。

3. OAuth2AuthorizationRequest

接下来就是OAuth2.0协议的核心重中之重了,可能以后你定制化的参考就来自这里,这是圈起来要考的知识点。我会对OAuth2AuthorizationRequestResolver在各种授权方式下的OAuth2AuthorizationRequest对象的解析进行一个完全的总结归纳。大致分为以下两部分:

3.1 由AuthorizationGrantType决定的

在不同AuthorizationGrantType下对OAuth2AuthorizationRequest的梳理。涉及到的成员变量有:

authorizationGrantType ,来自配置spring.security.client.registration.{registrationId}.authorizationGrantType。

responseType , 由authorizationGrantType 的值决定,参考下面的JSON。

additionalParameters,当authorizationGrantType值为authorization_code时需要额外的一些参数,参考下面JSON 。

attributes,不同的authorizationGrantType存在不同的属性。

其中类似{registrationId} 的形式表示{registrationId}是一个变量,例如 registrationId=gitee。

在OAuth2客户端配置spring.security.client.registration.{registrationId}的前缀中有以下五种情况。

当 scope 不包含openid而且client-authentication-method不为none时上述四个参数:

{ "authorizationGrantType": "authorization_code", "responseType": "code", "additionalParameters": {}, "attributes": { "registration_id": "{registrationId}" }}

当 scope 包含openid而且client-authentication-method不为none时上述四个参数:

{ "authorizationGrantType": "authorization_code", "responseType": "code", "additionalParameters": { "nonce": "{nonce}的Hash值" }, "attributes": { "registration_id": "{registrationId}", "nonce": "{nonce}" }}

当 scope不包含openid而且client-authentication-method为none时上述四个参数:

{ "authorizationGra.........

java oauth2搭建_Spring Security 实战干货:OAuth2授权请求是如何构建并执行的相关推荐

  1. oauth2 java 客户端_Spring Security 实战干货:客户端OAuth2授权请求的入口

    正版spring security实战编程与 54.9元 (需用券) 去购买 > 1. 前言 在Spring Security 实战干货:OAuth2第三方授权初体验一文中我先对OAuth2.0 ...

  2. 安全策略_Spring Security 实战干货:如何实现不同的接口不同的安全策略

    1. 前言 欢迎阅读 Spring Security 实战干货 系列文章 .最近有开发小伙伴提了一个有趣的问题.他正在做一个项目,涉及两种风格,一种是给小程序出接口,安全上使用无状态的JWT Toke ...

  3. springsecurity 登录失败_Spring Security 实战干货: 401和403状态

    1. 前言 最近几篇我对Spring Security中用户认证流程进行了分析,同时在分析的基础上我们实现了一个验证码登录认证的实战功能.当认证失败后交给了AuthenticationFailureH ...

  4. springsecurity 不允许session并行登录_Spring Security 实战干货:实现自定义退出登录...

    我是 码农小胖哥.天天有编程干货分享.觉得写的不错.点个赞,转发一下,关注一下.本文为个人原创文章,转载请注明出处,非法转载抄袭将追究其责任. 1. 前言 上一篇对 Spring Security 所 ...

  5. Spring Security 实战干货:OAuth2授权回调的核心认证流程

    1. 前言 我们在上一篇 Spring Security 实战干货:OAuth2 授权回调的处理机制 对 OAuth2 服务端调用客户端回调的流程进行了图解, 今天我们来深入了解 OAuth2 在回调 ...

  6. Spring Security 实战干货:客户端OAuth2授权请求的入口在哪里

    1. 前言 在Spring Security 实战干货:OAuth2 第三方授权初体验一文中我先对 OAuth2.0 涉及的一些常用概念进行介绍,然后直接通过一个 DEMO 来让大家切身感受了 OAu ...

  7. Spring Security 实战干货:OAuth2登录获取Token的核心逻辑

    作者 | 码农小胖哥 来源 | https://mp.weixin.qq.com/s/zdTBdSVunqwVGx-spHjLjw 1. 前言 在上一篇Spring Security 实战干货:OAu ...

  8. Spring Security 实战干货:玩转自定义登录

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 1. 前言 前面的关于 Spring Security  ...

  9. Spring Security 实战干货:自定义异常处理

    Spring Security 实战干货:自定义异常处理 转自:https://www.cnblogs.com/felordcn/p/12142514.html 文章目录 1. 前言 2. Sprin ...

最新文章

  1. iPhone开发技巧之工具篇(4)--- 使用afconvert转换WAV文件
  2. 华科发布报告:41%研究生学霸是单身!
  3. 去除SAP中的一些特殊字符
  4. Linux下利用backtrace追踪函数调用堆栈以及定位段错误
  5. 用telnet 测试Http协议
  6. HDU - 2457 DNA repair(AC自动机+dp)
  7. Take Your Seat Gym - 102222D
  8. 深度学习之神经网络的结构
  9. (14)Verilog HDL参数:parameter
  10. python简单实践作业_【Python】:简单爬虫作业
  11. github page hexo博客gitee_GitHub+hexo快速搭建个人博客
  12. springcloud架构特点_你想了解的「Spring Cloud」都在这里
  13. CS224N刷题——Assignment1.4_情感分析
  14. 逻辑卷、物理卷、卷组
  15. Vue3项目中使用AE+bodymovin+lottie的模式制作特效
  16. 机器人工程毕业设计☞开题报告
  17. 《Context and Attribute Grounded Dense Captioning》笔记
  18. java操作Excel、PDF文件
  19. 【VS】VS Code安装、配置、使用(windows10 64)
  20. 2021年保育员(中级)考试题及保育员(中级)考试报名

热门文章

  1. 设计模式笔记十七:迭代器模式
  2. 错误代码666020_Windows 系统错误代码大全
  3. linux挂载硬盘_Linux中如何对硬盘进行分区、格式化、挂载使用
  4. python中的import详解_如何在python中import
  5. chmod命令文件权限属性设置
  6. MyCAT全局序列号-数据库方式
  7. 消消乐实现下坠_手把手教你如何实现iOS消消乐小游戏Demo
  8. php exec执行多条命令,小技巧:在PHP中调用多条shell指令
  9. Java基础01 1个和2个区别比较
  10. html6与html5的区别,XHTML和HTML5的区别