Spring Authorization Server 系列(三)code换取token

code换取token

    • 概述
    • 客户端认证方式
    • 换取结果

概述

在获取到code后,就可以使用code换取token了,但在换取token这一步还会对客户端进行一些校验,而这也支持不同的方式,一起来看看。

客户端认证方式

在这里插入图片描述

  1. JwtClientAssertionAuthenticationConverter
    这里面又包含两种具体的方式:
  • ClientAuthenticationMethod.PRIVATE_KEY_JWT:这里直接以私钥生成一个 JWT 令牌发给授权服务器,然后将公钥暴露给授权服务器,授权服务器通过公钥来验证这个jwt,从而验证客户端。
  • ClientAuthenticationMethod.CLIENT_SECRET_JWT:这种方式是以客户端密钥创建jwt发送给授权服务器,由授权服务器根据客户端密钥进行验签,从而验证客户端
    其实这两种都是 JWT 的签名用法,只是加签的密钥不一样
  1. ClientSecretBasicAuthenticationConverter
    这是客户端直接传递以请求头的方式传递密钥,注意这里须用https保证安全,而且都是后端交互,以下两种本质都一样,只是一个是手动添加header;一种是由协议转换后添加,这种更标准化,也就是所谓的HTTP Basic 认证

    • 直接在header 中传递 客户端id和密钥,
      先用 :连接clientId和clientSecret;
      然后,再进行Base64编码;
      最后,前面拼上 Basic + 空格
      Authorization = Basic Base64(clientId:clientSecret)
    • 直接在url中传递嵌入客户端id和密钥,由HTTP协议层处理,这其实算是HTTP协议下 URL 规范的一部分。
      形式为
    protocol://[user:password@]hostname[:port] / path / [:parameters][?query]#fragment
    
  2. ClientSecretPostAuthenticationConverter
    这种比较好理解,直接在POST请求中将客户端id和密钥传过去
    这里可以直接将 以 查询参数body(x-www-form-urlencoded) 两种方式传递
    在这里插入图片描述
    在这里插入图片描述

http://localhost:9000/oauth2/token?grant_type=authorization_code&code=GvwOHTwHfnk50lwQOK1mLyYqOeARBpUUQzt1mSPPLWndqt51rV9sYDJmUmYY04HpRoTNhMH1XmFI-AT0FnVkjdEOKqHOdMeIh_9I-Sc1XSVP_MTp6h9ChdF9wYNI86Y&redirect_uri=http://www.baidu.com&client_id=messaging-client&client_secret=secret
  1. PublicClientAuthenticationConverter
    这种方式就是为了之前提到的公共客户端而创建的,这种客户端校验,使用的不是客户端密钥,而是客户端每次随机生成的一个编号保存起来,并对其进行 SHA-256 散列算法,生成一个hash值,并将 散列算法和和hash值传给授权服务器。
    在换取token阶段,客户端再将 原始值传给授权服务器,授权服务器再以同样的算法得到一个 hash值。二者比较,匹配则校验成功。
    在这里插入图片描述

换取结果

在这里插入图片描述

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

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

相关文章

期末复习总结【MySQL】聚合查询 + 多表联合查询(重点)

文章目录 前言一、聚合查询1, 聚合函数2, 聚合函数使用示例3, GROUP BY 子句4, HAVING 子句 二、联合查询(重点)1, 笛卡尔积2, 内连接2.1, 示例12.2, 示例22.3, 示例3 3, 外连接4, 自连接 总结 前言 各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助到你: &#…

Yolov8轻量级:EfficientViT,基于级联分组注意力模块的全新实时网络架构,better speed and accuracy

EfficientViT: Memory Efficient Vision Transformer with Cascaded Group Attention 论文:https://arxiv.org/abs/2305.07027 代码:Cream/EfficientViT at main microsoft/Cream GitHub 🏆🏆🏆🏆🏆🏆Yolo轻量化模型🏆🏆🏆🏆🏆🏆 近些年对视觉Tra…

动手学习卷积神经网络(CNN)(一)---卷积运算

卷积神经网络可以直接从原始数据中学习其特征表示并完成最终任务,可以说卷积网络是“端”到“端”的思想,在整个学习流程中并进行认为的子问题划分,而是交给深度学习模型直接学得从原始输入到期望输出得映射。 卷积神经网络是包含卷积层&…

Ai时代降临,我们的未来又在哪里?

文章目录 背景AI智能迭代进步码农的未来展望借助gpt快速成长总结 背景 随着人工智能的不断发展,自然语言处理技术也一直在不断的进步和发展,GPT(Generative Pre-trained Transformer)模型作为自然语言处理领域最前沿的技术之一&a…

lintcode-图的拓扑排序(java)

拓扑排序 拓扑排序-lintcode原题题目介绍解题思路代码演示解题方法二 (参考,不用掌握)前置知识 图的拓扑序和深度优先遍历和广度优先遍历 拓扑排序-lintcode原题 127.拓扑排序-原题链接,可以点进去测试 题目介绍 描述 给定一个有向图,图节点的拓扑排序定义如下: 对…

两个offer:一个996,月薪3万;一个885,月薪2万,怎么选?

找工作时,钱和闲,你选哪个? 一位网友拿到了两个offer,一个996,月薪3万,一个885,月薪2万,怎么选? 一部分网友选择885,因为自己是打工人,不是打工奴…

【Python】类与对象

知识目录 一、写在前面✨二、类与对象简介三、Car类的实现四、Date类的实现五、总结撒花😊 一、写在前面✨ 大家好!我是初心,希望我们一路走来能坚守初心! 今天跟大家分享的文章是 Python中面向对象编程的类与对象。 &#xff0…

Unreal Niagara粒子入门2

本次学习一下如何将Niagara参数暴露给蓝图、材质编辑器、粒子不同阶段。 1.暴露参数给蓝图 首先在左侧Parmeters参数面板的User Exposed处创建参数: 然后将参数拖入到想要绑定的粒子字段上,例如这里绑定给粒子发射数: 在调用粒子时&#…

【iOS】—— Tagged Pointer对象

文章目录 关于Tagged PointerNSTaggedPointer示例TaggedPointer 结构Tagged Pointer特点注意事项isa指针64位下的isa指针优化 本来打算细看一下weak的底层原理,看到了出现了很多次Tagged Pointer对象,就先来学一下Tagged Pointer,在之前刚学习…

Sentinel流控规则

1.Sentinel流控规则简介 1.1.基本介绍 1.2.进一步解释说明 资源名:唯一名称,默认请求路径。针对来源:Sentinel可以针对调用者进行限流,填写微服务名,默认default(不区分来源)。阈值类型/单机阈…

Linux 企业级安全原理和防范技巧

Linux 企业级安全原理和防范技巧 1. 企业级Linux系统防护概述1.1 企业级Linux系统安全威胁1.2 企业级Linux系统安全立体式防范体系1.2.1 Linux文件系统访问安全1.2.2 Linux进程安全1. 进程的种类2. 进程管理方法 1.2.3 Linux用户管理安全1. 管理用户及组文件安全2. 用户密码管理…

基于SSM的土家风景文化管理平台

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 前言…

孤儿僵尸守护进程

孤儿僵尸守护进程 1. 孤儿进程:2. 僵尸进程:3. 守护进程:(重点) 1. 孤儿进程: 父进程退出,还没退出的子进程就变成了孤儿进程 不要怕,还有爷爷进程init: 孤儿进程将被init进程所收养,并由init进程对它们完成状态收集…

MySQL主从复制配置

一、MySQL主从概念二、主库配置(Master)第一步:修改Mysql数据库的配置文件/etc/my.cnf第二步:重启Mysql服务 systemctl restart mysqld第三步:登录Mysql数据库,执行下面SQL第四步:登录Mysql数据库,执行下面SQL,记录下结…

解决node上传文件乱码问题终极方案

问题描述 今天在菜鸟教程学习node上传文件时遇到了一个中文乱码的问题,文件名包含中文就会显示乱码,上传到服务器的文件名也是乱码。试了两个方法都不行,最后还是问了万能的度娘才解决。 我做了一个非常简单的上传文件的界面, …

介绍10款ChatGPT替代产品

ChatGPT 引领着聊天 AI 的世界,许多人已经开始在日常生活中使用它。OpenAI 的 GPT-3 语言模型是聊天机器人的基础,它使得用户能够通过回答问题与 AI 进行交互。 GPT-4 的引入为机器人提供了更强大的功能。然而,它也有一个明显的缺点&#xff…

19-02 基于业务量级的架构技术选型演进

从零开始——单服务应用 单体应用技术选型 (GitHub、Gitee…)搜索是否有线程的产品用最熟悉的技术,最快的速度上线如果有经费:考虑商业化解决方案 个人小程序怎么做技术选型的 搜索是否有快速搭建下程序的软件技术选型 后端技…

python 网络编程和http协议--网络编程,HTTP协议,Web服务器

一.网络编程 1.IP地址 给网络中的每一台设备进行编号. IPV4 IPV6 2.端口和端口号 端口的作用就是给运行的应用程序提供传输数据的通道。 端口号的作用是用来区分和管理不同端口的,通过端口号能找到唯一个的一个端口。 3.TCP协议 协议: 双方的约定. 网络传输协…

代码线程安全

线程生命周期 synchronized synchronized会自动释放锁 synchronized同步代码块 synchronized后面括号里obj是锁对象(保证唯一);static修饰的obj对象是自定义MyThread线程类的静态成员变量,该自定义线程类所有实例共享保证锁对象唯一性;另一…

博客系统的后端设计(八) - 实现发布博客功能

文章目录 发布博客1. 约定前后端交互接口2. 服务器代码3. 客户端代码4. 出现的问题 发布博客 在原来的编辑页面点击发布文章按钮,是不会有什么效果的。 这是因为此时还不能实现前后端的交互。 1. 约定前后端交互接口 请求使用 POST,路径是 /blog title这…
最新文章