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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

03.QT命名规范及快捷键(部分)

一、命名规范 1.类名 大驼峰规则:首字母大写,单词和单词之间首字母大写。 2.变量名 小驼峰规则:首字母小写,单词和单词之间首字母大写。 二、快捷键 1.代码操作相关 注释:ctrl / 运行:ctrl r 编译…

从入门到精通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.…

redis 三主六从高可用docker(不固定ip)

redis集群(cluster)笔记 redis 三主三从高可用集群docker swarm redis 三主六从高可用docker(不固定ip) 此博客解决,redis加入集群后,是用于停掉后重启,将nodes.conf中的旧的Ip替换为新的IP,从而达到不会因为IP变化导致集群无法…

【递归、搜索与回溯】综合练习

欢迎来到Cefler的博客😁 🕌博客主页:那个传说中的man的主页 🏠个人专栏:题目解析 🌎推荐文章:题目大解析(3) 目录 👉🏻找出所有子集的异或总和再求…

音阶是音乐理论的基本概念之一

音阶是音乐理论的基本概念之一,它是一组按照音高顺序排列的音。不同类型的音阶有不同的音阶结构。在西方音乐中,最常见的是大调音阶和小调音阶。下面是这两种音阶的基本构成: 大调音阶(Major Scale): 大调音…

[Python]两个杯子取水问题

利用两个杯子巧取三升水: 今天的这个趣味数学小游戏是利用两个没有刻度的水杯,巧妙地取出三升水来。 题目的条件是:一个总容量为6升的杯子和一个总容量为5升的杯子,同时面前有无限容量的水供你使用。不借助其它任何的容器&#xf…

just recode for myself 统计大模型SFT的结果与version2中text的结果bad case

问题描述: 利用Qwen大模型进行SFT (lora)。将生成的结果与version2版本下的中文test.txt进行bad case分析 代码实现: from tqdm import tqdm, trange import os import re from typing import List import json from pdb import set_trace as stoppip…

测试新字符设备驱动代码

一. 简介 上一篇文章编写了新字符设备驱动框架的代码,并编写了 LED灯IO初始化工作,也编写了Led的开与关函数。文章地址如下: 向新字符设备驱动代码框架中添加Led功能函数-CSDN博客 本文对所完成的新字符设备驱动代码进行测试。通过测试程…

12、高可用性

什么是高可用性 高可用性不是绝对的,只有相对更高的可用性。百分之百的可用性是不可能达到的。可用性的定义不仅仅包括服务正在运行的时间段,还包括应用是否能以足够好的性能处理请求。 导致宕机的原因 在运行环境的问题中,最普通的问题是…

7-1 sdut-Collection-sort--C~K的班级(II)--笔记篇

题目 经过不懈的努力,CXK终于当上了班主任。 现在他要统计班里学生的名单,但是CXK在教务系统中导出班级名单时出了问题,发现会有同学的信息重复,现在他想把重复的同学信息删掉,只保留一个, 但是工作量太大…

LeetCode 热题 100——283. 移动零

283. 移动零 提示 简单 2.3K 相关企业 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,…

使用anaconda创建notebook工程

1.由于每个工程使用的环境都可能不一样,因此一个好的习惯就是不同的工程都创建属于自己的环境,在anaconda中默认的环境是base: //括号中名字,代表当前的环境 (base)dragonmachine: $ conda create --nameexample2.激活环境 // 环…

伺服电机:电子齿轮比

电子齿轮比的概念 位置控制模式下,输入的位置指令是对负载位移进行设定,而电机的位置指令是编码器单位,是对电机的位移进行进行设定,电机位置指令与输入位置指令的比例就是电子尺齿轮比。 输入的位置指令,所对应的位…

JVM内存区域与常见问题

内存结构 这里先以JDK1.8 hotspot垃圾收集器为例,讲讲每块区域存储的数据以及可能会抛的异常。 堆 存放对象实例,会出现内存溢出或内存泄露等情况。 栈 一次方法调用会产生一个栈帧,如果出现递归死循环调用栈空间满了,会出现…

【全网首发】洛谷贪心题解集合

贪心 1.P2240 【深基12.例1】部分背包问题 【深基12.例1】部分背包问题 - 洛谷 思路 万不要被题目给误导了,这道题是贪心。 所有金币都可以分开,也就是说只要按照性价比最高的取一定得到的价值最大。 性价比就是这堆金币的价值除以重量。 只需要把…

85双指针解三数之和

问题描述:给你一个包含n个整数的数组nums,判断nums中是否勋在三个元素a,b,c使得abc0,请你找出所有和为0且不重复的三元组。 求解思路:如果使用for循环的方式,n3的时间复杂度,可以采用双指针的方式,先将整个…

企业级大数据架构设计

企业级大数据架构设计 企业级大数据架构设计 又名: 学习大数据概念, 写框架(第1天) 数据架构与设计:概述与设计考虑 引言数据架构概述设计考虑因素构建数据架构的步骤 大数据的核心架构内容:构建高效和…

14.用户管理

目录 1、权限表 1、user表 1.用户列 2.权限列 3.安全列 4.资源控制列 2、db表和host 表 1.用户列 2.权限列 3. tables_priv 表和 columns _priv 表 4.procs_priv 表 2、账户管理 1. 登录和退出MySQL服务器 2、创建普通用户: 1.使用CREATE USER语创建…

前端crypto-js 库: MD5

文章目录 什么是crypto-js安装依赖MD5 什么是crypto-js github地址: https://github.com/brix/crypto-js cryptojs文档: https://cryptojs.gitbook.io/docs/#encoders CryptoJS (crypto.js) 为 JavaScript 提供了各种各样的加密算法。 CryptoJS是一个JavaScript加密算法库&a…

免费的CISSP备考学习网站

CISSP(Certified Information Systems Security Professional)是一项高级的信息安全认证,官方认证机构是(ISC)。虽然(ISC) 提供了官方培训资料,但是很多学习资料都是商业性质的,需要付费购买。尽管如此,仍然…