RFC7636-PKCE

前言

PKCE (RFC 7636) 是授权代码流的扩展,用于防止 CSRF 和授权代码注入攻击。

PKCE 不是客户端身份验证的一种形式,PKCE 不能替代客户端密码或其他客户端身份验证。即使客户端使用客户端密码或其他形式的客户端身份验证(如 private_key_jwt),也建议使用 PKCE

注意:由于PKCE不能替代客户端身份验证,因此它不允许将公共客户端视为机密客户端。

PKCE 最初旨在保护移动应用程序中的授权代码流,但其防止授权代码注入的能力使其对每种类型的 OAuth 客户端都很有用,甚至是使用客户端身份验证的 Web 应用程序。

RFC 7636:代码交换证明密钥(PKCE,发音为“pixy”)是关于针对授权代码拦截攻击的对策的规范。

在这里插入图片描述

该规范于 2015 年 9 月发布。它添加了:

  1. code_challenge 参数和 code_challenge_method 使用授权代码流的授权请求的参数。
  2. code_verifier 参数设置为与授权请求对应的令牌请求。

此机制使授权服务器能够拒绝来自没有代码验证程序的恶意应用程序的令牌请求。


PKCE授权请求

Request Parameters

使用 PKCE 的授权请求会发出 parameter,也可以选择 code_challenge_method parameter 发出 code_challenge

Code Challenge Value

代码验证程序本身是使用 字符的随机字符串,最小长度为 43 个字符 [A-Z] / [a-z] / [0-9] / “-” / “.” / “_” / “~” ,最大长度为 128 个字符。
在这里插入图片描述

Code Challenge Method

定义的代码质询方法是 plain 和 S256 。将代码验证器转换为代码质询的相应计算逻辑如下。

Method 方法Logic 逻辑
plaincode_challenge = code_verifier
S256code_challenge = BASE64URL-ENCODE(SHA256(ASCII(code_verifier))); code_challenge = BASE64URL-ENCODE(SHA256(ASCII(code_verifier)))

plain 方法不会更改输入,因此 的值 code_verifier 和结果 code_challenge 值相等。

S256 方法计算输入的 SHA-256 哈希值,然后使用 Base64-URL 对哈希值进行编码。例如,当 的值为 dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk 时,该 code_challenge 值变 code_verifierE9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM

当使用的代码质询方法是 S256 时,客户端应用程序必须通过在授权请求中包含 code_challenge_method=S256 参数来告知它。如果 code_challenge_method 省略参数,则授权服务器将假定 plain 为默认值。


PKCE Authorization Response

生成授权代码后,授权服务器会将其保存到其数据库中,并在授权请求中包含代码质询和代码质询方法。

授权服务器稍后将使用保存的代码质询和代码质询方法来验证来自客户端应用程序的令牌请求。

来自授权终结点的响应对 PKCE 没有什么特殊之处。像往常一样,这是正常的反应。
在这里插入图片描述


PCKE Token Request

从授权服务器接收授权代码后,客户端应用程序会发出令牌请求。除了授权代码之外,令牌请求还必须包含用于计算代码质询的代码验证程序。

用于指定代码验证程序的请求参数的名称为 code_verifier

在这里插入图片描述


PKCE Token Response

Require Code Verifier

支持 PKCE 的授权服务器的令牌终结点检查令牌请求是否包含有效的代码验证程序。
当然,仅当authorization_code grant_type并且令牌请求中包含的授权代码与代码质询相关联时,才会执行此检查。
如果令牌请求不包含有效的代码验证程序,但满足上述条件,则该请求被视为来自恶意应用程序,授权服务器将返回错误响应。

Verify Code Verifier

通过比较两个代码质询来执行验证。
一个是授权请求中包含的内容,并存储在数据库中。另一个是授权服务器使用令牌请求中包含的代码验证程序和存储在数据库中的代码质询方法计算的内容。
如果两个代码质询相等,则令牌请求可被视为来自发出原始授权请求的合法客户端应用程序。否则,必须将令牌请求视为来自恶意应用程序。

Issue Access Token

如果验证了令牌请求,授权服务器将照常颁发访问令牌。

在这里插入图片描述


参考:
参考1
参考2
参考3

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

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

相关文章

oracle物化视图

物化视图定义 视图是一个虚拟表(也可以认为是一条语句),基于它创建时指定的查询语句返回的结果集,每次访问它都会导致这个查询语句被执行一次,为了避免每次访问都执行这个查询,可以将这个查询结果集存储到…

【STM32】STM32学习笔记-输入捕获测频率和占空比(18)

00. 目录 文章目录 00. 目录01. 预留02. 输入捕获测频率接线图03. 输入捕获测频率示例04. 输入捕获测频率和占空比接线图05. 输入捕获测频率和占空比示例06. 示例程序下载07. 附录 01. 预留 02. 输入捕获测频率接线图 03. 输入捕获测频率示例 pwm.h #ifndef __PWM_H #define…

从入门到精通UNet: 让你快速掌握图像分割算法

文章目录 一、UNet 算法简介1.1 什么是 UNet 算法1.2 UNet 的优缺点1.3 UNet 在图像分割领域的应用 二、准备工作2.1 Python 环境配置2.2 相关库的安装 三、数据处理3.1 数据的获取与预处理3.2 数据的可视化与分析 四、网络结构五、训练模型5.1 模型训练流程5.2 模型评估指标5.…

【JS逆向】逆向案例之 ----- 安某客滑块

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 安某客滑块小结 1. 初步分析 总共分为两步, 获取滑块图片信息检查滑块移动是否正确 整体框架如下: 1.1 getinfoTp 获取图片信息…

Plantuml之JSON数据语法介绍(二十五)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

Nx市工业数据洞察:Flask、MySQL、Echarts的可视化之旅

Nx市工业数据洞察:Flask、MySQL、Echarts的可视化之旅 背景数据集来源技术选型功能介绍创新点总结 背景 随着工业化的不断发展,Nx市工业数据的收集和分析变得愈发重要。本博客将介绍如何利用Flask、MySQL和Echarts等技术,从统计局获取的数据…

【Java进阶篇】JDK新版本中的新特性都有哪些

JDK新版本中的新特性都有哪些 ✔️经典解析✔️拓展知识仓✔️本地变量类型推断✔️Switch 表达式✔️Text Blocks✔️Records✔️封装类✔️instanceof 模式匹配✔️switch 模式匹配 ✅✔️虚拟线程 ✔️经典解析 JDK 8中推出了Lambda表达式、Stream、Optional、新的日期API等…

Halcon闭运算closing

Halcon闭运算 文章目录 Halcon闭运算 闭运算的计算步骤,为先膨胀,后腐蚀。这两步操作能将看起来很接近的元素,如区域内部的空洞或外部孤立的点连接成一体,区域的外观和面积也不会有明显的改变。通俗地说,就是类似于“填…

echarts 折线图根据x轴时间渲染不同颜色的折线

footIm 如上图所示一条折线多种颜色 后端数据返回"data": [ { “dateTime”: “2023-10-11 00:02:10”, “pos”: 6, “curr”: 104.6 }, { “dateTime”: “2023-10-11 00:02:39”, “pos”: 7, “curr”: 104.6 }, …] 我们拿到后端返回的res.data传递给…

mysql原理--Explain详解

1.概述 一条查询语句在经过 MySQL 查询优化器的各种基于成本和规则的优化会后生成一个所谓的 执行计划 ,这个执行计划展示了接下来具体执行查询的方式,比如多表连接的顺序是什么,对于每个表采用什么访问方法来具体执行查询等等。设计 MySQL 的…

Java EE Servlet之Cookie 和 Session

文章目录 1. Cookie 和 Session1.1 Cookie1.2 理解会话机制 (Session)1.2.1 核心方法 2. 用户登录2.1 准备工作2.2 登录页面2.3 写一个 Servlet 处理上述登录请求2.4 实现登录后的主页 3. 总结 1. Cookie 和 Session 1.1 Cookie cookie 是 http 请求 header 中的一个属性 浏…

【微服务】2.创建多个服务器

vmware有克隆功能直接拷贝以及设置好的虚拟机 如果要自己设置IP地址,修改/etc/sysconfig/network-scripts/ 编辑ifcfg-ens33需改ip地址 #开机加载网络配置启动网络服务 ONBOOT"yes" #分配ip的协议 none static :不自动分配,手动设置ip / dhcp…

Iterator(迭代器) 和 list

Iterator(迭代器) 和 list 文章目录 一、Iterator(迭代器)二、list 提示:以下是本篇文章正文内容,下面案例可供参考 一、Iterator(迭代器) 对 collection 进行迭代的迭代器。迭代器…

基于简化版python+VGG+MiniGoogLeNet的智能43类交通标志识别—深度学习算法应用(含全部python工程源码)+数据集+模型(二)

目录 前言总体设计系统整体结构图系统流程图 运行环境模块实现1. 数据预处理2. 模型构建1)VGG模型简化版2)GoogLeNet简化版——MiniGoogLeNet 3. 模型训练及保存 相关其它博客工程源代码下载其它资料下载 前言 本项目专注于解决出国自驾游特定场景下的交…

Avalonia学习(十六)-Mapsui

今天开始继续Avalonia练习。 本节&#xff1a;Mapsui 1.引入 Mapsui.Avalonia 2.项目引入 前台代码 <Window xmlns"https://github.com/avaloniaui"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:vm"using:MapsuiAvalonia.Vi…

个人任务和项目管理软件tududi的安装

现在已经是 2024 年了&#xff0c;祝大家新年快乐&#xff0c;万事如意。 什么是 tu|du|di ? tu|du|di是一个使用 Sinatra 构建的任务和项目管理 Web 应用程序。它允许用户有效地管理他们的任务和项目&#xff0c;将它们分类到不同的区域&#xff0c;并跟踪截止日期。tu|du|d…

Linux驱动学习—ioctl接口

1、unlock_ioctl和ioctl有什么区别&#xff1f; kernel 2.6.36 中已经完全删除了struct file_operations 中的ioctl 函数指针&#xff0c;取而代之的是unlocked_ioctl 。ioctl是老的内核版本中的驱动API&#xff0c;unlock_ioctl是当下常用的驱动API。unlocked_ioctl 实际上取…

服务器监控软件夜莺部署(一)

文章目录 一、夜莺介绍1. 简介2. 相关网站 二、夜莺部署1. 部署架构2. Docker启动3. 配置数据源4. 内置仪表盘效果5. 时序指标效果 一、夜莺介绍 1. 简介 夜莺监控系统是一款专业的服务器监控软件&#xff0c;它可以帮助用户实时监测服务器的CPU、内存、磁盘利用率等。 夜莺监…

0101包冲突导致安装docker失败-docker-云原生

文章目录 1 前言2 报错3 解决结语 1 前言 最近在学习k8s&#xff0c;前置条件就是要安装指定版本的docker&#xff0c;命令如下 yum install -y docker-ce-20.10.7 docker-ce-cli-20.10.7 containerd.io-1.4.62 报错 file /usr/libexec/docker/cli-plugins/docker-buildx fr…

动态内存管理篇

为什么要动态内存分配&#xff1f; 之前&#xff0c;我们向内存申请空间&#xff0c;有两种方式&#xff0c;一种是定义变量&#xff0c;一种是建立数组&#xff1b;但是&#xff0c;这两种方式都有缺陷&#xff0c;创建的空间大小是固定的&#xff0c;在程序的运行过程中&…