架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 17|回复: 0

OIDC 中的 PKCE 之 code_challenge 和 code_vertifier 理解

[复制链接]
发表于 3 小时前 | 显示全部楼层 |阅读模式
OAuth 2.0 提供了多种授权模式,其中授权码模式(Authorization Code Grant)是最常用和最安全的一种。而 code_challenge 是该模式中的一个安全增强特性,主要用于 PKCE(Proof Key for Code Exchange)机制。

什么是 PKCE?

PKCE(Proof Key for Code Exchange)是一种扩展,旨在提高 OAuth 2.0 授权码模式的 安全性 ,特别是当授权码在公共客户端(如运行在浏览器中的 JavaScript 应用或移动应用)中使用时。PKCE 通过在授权请求中添加一个额外的验证步骤来防止授权码被拦截和滥用。

code_challenge 的作用

code_challenge 是 PKCE 机制的一部分,它在授权请求阶段生成并发送。它基于一个秘密值(称为 code_verifier),通过一种散列算法(如 S256)进行变换得到。code_challenge 的目的是在不直接暴露 code_verifier 的情况下,为后续的令牌请求提供一个验证基础。

code_challenge 和 code_verifier 的生成与使用

生成 code_verifier:
code_verifier 是一个高熵、随机生成的字符串,字符长度(介于43到128之间)。默认值为43。

生成 code_challenge:
使用 code_verifier,通过一种散列算法(如 S256)生成 code_challenge。对于 S256,code_challenge 是 code_verifier 的 SHA-256 哈希值的 Base64 URL 编码,但要去掉编码中的 = 填充字符,并且确保输出的长度是 43 个字符(由于 Base64 URL 编码后每 4 个字符代表 3 个字节,但最后一个字符块可能不足 4 个字符,所以去掉 = 后长度可能略有变化)。

在授权请求中使用 code_challenge:
在发起授权请求时,将 code_challenge 作为请求参数之一发送给授权服务器。

在令牌请求中使用 code_verifier:
当授权服务器返回授权码后,客户端使用这个授权码以及之前生成的 code_verifier 向令牌端点请求访问令牌。授权服务器将验证 code_challenge 和 code_verifier 是否匹配,从而确保请求是由原始客户端发起的。

PKCE 生成

在线生成 PKCE 工具:超链接登录可见。

C# 生成代码如下:
如下图:

QQ截图20261025104541.jpg

参考:

超链接登录可见。
超链接登录可见。




上一篇:.NET/C# 两种方式验证 jwt token 签名有效性
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2026-10-25 14:48

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表