Spring Authorization Server 系列(二)获取授权码

Spring Authorization Server 系列(二)获取授权码

    • 概述
    • 获取授权码
      • 获取授权码的url
      • 逻辑解析
        • 匹配url
        • 参数解析

概述

Spring Authorization Server 是基于 OAuth2.1 和 OIDC 1.0 的。
只有 授权码,刷新token,客户端模式。

获取授权码

用过Spring Security 的都知道,ta是基于一系列 Filter 实现其功能的,Spring Authorization Server 以及之前的 Spring Security OAuth解决方案也是如此。
通过查看API 知道,获取授权码的Filter为 OAuth2AuthorizationEndpointFilter
OAuth2的流程这里不赘述,下面开始解析 OAuth2AuthorizationEndpointFilter

获取授权码的url

查看源码,可以看到,这个filter默认匹配的url是 /oauth2/authorize
授权url

http://localhost:9000/oauth2/authorize?client_id=messaging-client&response_type=code&scope=openid+profile&state=xzy&redirect_uri=http://www.baidu.com

逻辑解析

匹配url

在这里插入图片描述
这是入口,如果当前请求匹配不上,则跳过此Filter
第一步 GET 请求 /oauth2/authorize,只要url和请求方式匹配即可

参数解析

一旦匹配上,接下来会进行参数解析;

  1. 解析get请求参数(包括首次的授权请求和登录成功后重定向第二次授权请求);这里可以发现一个点,用户认证的Filter在OAuth2的Filter之前,对于未认证的请求,OAuth2的Filter会将其重定向到登录页
    通过debug可以发现,解析GET请求参数的 converter为 OAuth2AuthorizationCodeRequestAuthenticationConverter

    • response_type
      在这里插入图片描述
      必须,且只能有一个

    • client_id
      在这里插入图片描述
      必须,且只能有一个

    • 当前认证上下文,如果已经认证,则取出认证结果,否则设置为匿名认证
      在这里插入图片描述

    • redirect_uri在这里插入图片描述
      可选,最多一个

    • scope在这里插入图片描述
      可选,最多一个
      但这个参数,要注意,它和其他参数有点不一样,如果有值,还会进一步处理
      在这里插入图片描述
      这个参数会以空格为点,进行拆分,形成一个集合
      这里又牵出了一个基础知识,我们知道在url中的一些特殊符号是不能直接使用的;涉及到url编码的一些问题。
      对于scope的值,如果要传多个,可以使用 + 或者 空格(%20) 隔开。

    • state在这里插入图片描述
      state是一个可选,但是推荐使用的参数。主要用于客户端确保 OAuth2.x 中回调那一步时,是真正的授权服务器回调给自己。
      使用方式为:在开始请求授权时,客户端传给授权服务器的一个随机字符串,然后授权服务器回调时,会原封不动将这个参数传给客户端,此时,客户端可以比较这两个值是否一致,只有一致时,表示这个回调来自真实的授权服务器,这个授权码是可信的

    • code_challenge && code_challenge_method
      这俩是后面新加的参数,对于一般的OAuth2授权流程是不需要的。
      ta主要是针对公共客户端的授权,一般指前端应用,不方便存储密钥的客户端。

    目的:用于授权服务器确定,使用获取code和换取token的同一个客户端。
    使用方式
    1. 本地生成一个随机字符串 code_verifier,使用 code_challenge_method算法,得到 一个 code_challenge
    2. 请求授权码时,将这两个值,都传给授权服务器,授权服务器会保存两个值 code_challenge_method code_challenge

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/23596.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Revit建模|Revit风管怎么绘制?

​绘制风管是机电工程重要的一环,对于不少刚接触Revit的小伙伴来说似乎还无从下手,今天就让小编来告诉大家在Revit中绘制风管的方法。 一、在Revit绘制风管 第一步:首先我们先在revit的界面中项目文件找到风管。 第二步:打开后我…

Mysql 学习(十 三)InnoDB的BufferPool

为什么要有缓存? 我们知道每次获取数据我们都需要从磁盘获取,磁盘的运行速度又慢的不行,对于这一个问题我们要怎么解决呢?我们把查询结果存储起来不就行了,因为当需要访问某个页的数据时,就会把完整的页的…

dvwa靶场通关(一)

第一关:Brute force low 账号是admin,密码随便输入 用burp suite抓包 爆破得出密码为password 登录成功 Medium 中级跟low级别基本一致,分析源代码我们发现medium采用了符号转义,一定程度上防止了sql注入,采用暴力破…

简析java JNI技术

前言 认识JNI(Java Native Interface)技术,了解Java调用本地C/C库的简单原理以及一些基本的知识点;自己编写一个自定义的JNI接口。 一、简介 JNI是Java Native Interface的缩写,通过使用 Java本地接口书写程序,可以确保代…

Linux命令(22)之chage

Linux命令之chage 1.chage介绍 chage命令用来更改linux用户密码到期信息,包括密码修改间隔最短、最长日期、密码失效时间等等。 2.chage用法 chage [参数] 用户名 chage常用参数 参数说明-m密码可更改的最小天数,为0表示可以随时更改-M密码有效期最大…

神经网络语言模型(NNLM)

神经网络语言模型【NNLM】 1 为什么使用神经网络模型?2 什么是神经网络模型?3. 代码实现3.1 语料库预处理代码3.2 词向量创建3.3 NNLM模型类3.4 完整代码 1 为什么使用神经网络模型? 解决独热编码无法解决词之间相似性问题 使用神经网络语言…

Blazor实战——Known框架增删改查导

本章介绍学习增、删、改、查、导功能如何实现,下面以商品资料作为示例,该业务栏位如下: 类型、编码、名称、规格、单位、库存下限、库存上限、备注 1. 前后端共用 1.1. 创建实体类 在KIMS项目Entities文件夹下创建KmGoods实体类该类继承Ent…

【C++】类和对象的应用案例 2 - 点和圆的关系

欢迎来到博主 Apeiron 的博客,祝您旅程愉快 !时止则止,时行则行。动静不失其时,其道光明。 目录 1、缘起 2、分析 3、示例代码 1 4、代码优化 4.1、point.h 4.2、point.c 4.3、circle.h 4.4、circle.c 4.4、main.c …

Netty 源码分析系列(十八)一行简单的writeAndFlush都做了哪些事?

文章目录 前言源码分析ctx.writeAndFlush 的逻辑writeAndFlush 源码ChannelOutBoundBuff 类addMessage 方法addFlush 方法AbstractNioByteChannel 类 小结 前言 对于使用netty的小伙伴来说,我们想通过服务端往客户端发送数据,通常我们会调用ctx.writeAn…

实时聊天组合功能,你了解吗?

你有兴趣安装实时聊天组合功能吗?如果您选择了SaleSmartly(ss客服),您的实时聊天插件可以不仅仅只是聊天通道,还可以有各种各样的功能,你不需要包含每一个功能,正所谓「宁缺勿滥」,功…

再获认可!腾讯连续三年被Gartner列为CWPP供应商之一

随着云的快速发展,企业的工作负载已经从服务器发展到虚拟机、容器、serverless等,部署的模式也日益复杂,包括公有云、混合云和多云等。在此背景下,传统的主机安全防护已无法满足需求,CWPP(云工作负载保护平…

C#,码海拾贝(23)——求解“复系数线性方程组“的“全选主元高斯消去法“之C#源代码,《C#数值计算算法编程》源代码升级改进版

using System; namespace Zhou.CSharp.Algorithm { /// <summary> /// 求解线性方程组的类 LEquations /// 原作 周长发 /// 改编 深度混淆 /// </summary> public static partial class LEquations { /// <summary&g…

day20 - 绘制物体的运动轨迹

在我们平常做目标检测或者目标追踪时&#xff0c;经常要画出目标的轨迹图。绘制轨迹图的一种方法就是利用光流估计来进行绘制。 本期我们主要来介绍视频中光流估计的使用和效果&#xff0c;利用光流估计来绘制运动轨迹。 完成本期内容&#xff0c;你可以&#xff1a; 掌握视…

网站部署与上线(1)虚拟机

文章目录 .1 虚拟机简介2 虚拟机的安装 本章将搭建实例的生产环境&#xff0c;将所有的代码搭建在一台Linux服务器中&#xff0c;并且测试其能否正常运行。 使用远程服务器进行连接&#xff1b; 基本的Linux命令&#xff1b; 使用Nginx搭建Node.js服务器&#xff1b; 在服务器端…

一、预约挂号详情

文章目录 一、预约挂号详情1、需求分析 2、api接口2.1 添加service接口2.2 添加service接口实现2.2.1 在ScheduleServiceImpl类实现接口2.2.2 在获取科室信息 2.3 添加controller方法 3、前端3.1封装api请求3.2 页面展示 二、预约确认1、api接口1.1 添加service接口1.2 添加con…

通过python采集整站lazada商品列表数据,支持多站点

要采集整站lazada商品列表数据&#xff0c;需要先了解lazada网站的结构和数据源。Lazada是东南亚最大的电商平台之一&#xff0c;提供各种商品和服务。Lazada的数据源主要分为两种&#xff1a;HTML和API。 方法1&#xff1a;采集HTML数据 步骤1&#xff1a;确定采集目标 首先…

一、CNNs网络架构-基础网络架构(LeNet、AlexNet、ZFNet)

目录 1.LeNet 2.AlexNet 2.1 激活函数&#xff1a;ReLU 2.2 随机失活&#xff1a;Droupout 2.3 数据扩充&#xff1a;Data augmentation 2.4 局部响应归一化&#xff1a;LRN 2.5 多GPU训练 2.6 论文 3.ZFNet 3.1 网络架构 3.2 反卷积 3.3 卷积可视化 3.4 ZFNet改…

Java的Arrays类的sort()方法(41)

目录 sort&#xff08;&#xff09;方法 1.sort&#xff08;&#xff09;方法的格式 2.使用sort&#xff08;&#xff09;方法时要导入的类 3.作用 4.作用的对象 5.注意 6.代码及结果 &#xff08;1&#xff09;代码 &#xff08;2&#xff09;结果 sort&#xff08;&…

【Netty】字节缓冲区 ByteBuf (六)(上)

文章目录 前言一、ByteBuf类二、ByteBuffer 实现原理2.1 ByteBuffer 写入模式2.2 ByteBuffer 读取模式2.3 ByteBuffer 写入模式切换为读取模式2.4 clear() 与 compact() 方法2.5 ByteBuffer 使用案例 总结 前言 回顾Netty系列文章&#xff1a; Netty 概述&#xff08;一&…

亏损?盈利?禾赛科技Q1财报背后的激光雷达赛道「现实」

随着禾赛科技在去年登陆美股&#xff0c;作为全球为数不多已经开始前装量产交付的激光雷达上市公司&#xff0c;财务数据的变化&#xff0c;也在一定程度上反映了行业的真实状况。 根据禾赛科技最新发布的今年一季度财报显示&#xff0c;公司季度净营收为4.3亿元&#xff08;人…