oauth-2.0 - 在 OpenID Connect with PKCE 中,客户端如何知道用户重定向后使用哪个 code_verifier 发送哪个授权码?
问题描述
我正在参加关于 OpenID Connect 授权代码工作流的 ASP.NET 安全课程,该课程具有 PKCE 保护以防止代码重放攻击。这个过程有一个方面我不明白。
过程:
依赖客户端生成PKCE code_verifier,哈希成code_challenge,以code_challenge作为查询参数将用户发送到授权服务器。
授权服务器存储code_challenge,发布授权码,并使用授权码将用户重定向回客户端。
客户端将授权码连同原始的 code_verifier 一起发送以交换令牌。授权服务器在颁发令牌之前验证 code_verifier 确实散列到 code_challenge 中。
我的问题是第 3 步:由于 HTTP 是无状态的,客户端如何知道要与授权码一起发送哪个 code_verifier?此 code_verifier 是否存储在用户代理的 cookie 中?
解决方案
PKCE 最初是为移动客户端设计的,它们通常只发出一个授权请求。但现在建议所有使用授权代码流的客户端。
您是正确的,如果客户端是为许多用户提供服务的 Web 应用程序,则客户端应用程序需要将正确的 code_verifier 与授权请求相关联。
如您所说,客户端可以将 code_verifier 存储在 cookie 中,因此它将与授权码一起发送给客户端。
或者它可以将它存储在客户端的服务器端,并将状态参数中的密钥粘贴到授权请求中。如果与授权请求一起传递,状态将成为对 redirect_uri 调用的一部分。
推荐阅读
- python - 与“简单”国际象棋相关的随机代码作斗争
- google-sheets - 未找到 Google 表格索引匹配项
- python - 从 json.file 中提取信息,其中字段位于各种 dicts 的不同位置
- java - 函数解密器
- java - 构造java类以避免instanceOf
- reinforcement-learning - NGU、R2D2、MuZero 和 Agent57 在强化学习分类中的哪些位置?
- java - 在 Java 中将特殊字符写入属性文件的问题
- node.js - 突变 null 返回 GraphQL
- symfony - Symfony Composer 创建项目卡在将“symfony/symfony”中列出的包限制为“5.0.*”
- python - 如何在列表的不同部分执行特定操作?