Oauth 2.0 “的意义是什么?”;代码“验证器”;在PKCEOAuth2.0中?

Oauth 2.0 “的意义是什么?”;代码“验证器”;在PKCEOAuth2.0中?,oauth-2.0,pkce,Oauth 2.0,Pkce,在PKCE中,我了解到code_verifier用于生成代码质询,稍后授权服务器将验证此code_verifier值以完成PKCE过程 这个代码值有多敏感?这个值必须保密吗?如果该值泄漏,对手可以执行什么样的攻击?验证程序code\u确实很敏感:它是客户端在对令牌端点的调用中证明它是首先发起授权请求的人的机制 此值应保密,另请参见下文 泄漏它将允许攻击者在对授权服务器的令牌端点的调用中模拟(公共)客户端,从而获得用于真实客户端的令牌 请注意,即使在code\u校验器上不使用任何(散列)转换,而是

在PKCE中,我了解到code_verifier用于生成代码质询,稍后授权服务器将验证此code_verifier值以完成PKCE过程


这个代码值有多敏感?这个值必须保密吗?如果该值泄漏,对手可以执行什么样的攻击?

验证程序
code\u
确实很敏感:它是客户端在对令牌端点的调用中证明它是首先发起授权请求的人的机制

此值应保密,另请参见下文

泄漏它将允许攻击者在对授权服务器的令牌端点的调用中模拟(公共)客户端,从而获得用于真实客户端的令牌

请注意,即使在
code\u校验器
上不使用任何(散列)转换,而是在授权请求的
code\u质询
中作为
plain
发送,对于能够截获重定向URI回调的攻击者来说,这仍然很困难,因为他还必须截获传出请求

但一般情况下,
code\u验证器
应使用SHA256散列到
code\u质询
中,因此即使在拦截请求时,攻击者也无法从以下内容推断出
code\u验证器

OAuth 2.0[RFC6749]公共客户端易受 授权码拦截攻击

在此攻击中,攻击者截获授权代码 从通信路径内的授权端点返回 不受传输层安全性(TLS)的保护,例如- 客户端操作系统内的应用程序通信

一旦攻击者获得了对授权代码的访问权,它就可以 使用它来获取访问令牌

为了缓解此攻击,此扩展动态地利用 创建了一个称为“代码验证器”的加密随机密钥。A. 为每个授权请求创建唯一的代码验证程序,并且 将其转换后的值(称为“代码质询”)发送到 授权服务器以获取授权代码。这个 然后将获得的授权代码发送到令牌端点 “代码验证器”,服务器将其与以前的代码进行比较 收到请求代码,以便它可以执行占有证明 客户提供的“代码验证程序”的验证。这起到了缓解的作用 因为攻击者不知道这个一次性密钥,因为它是被发送的 通过TLS,无法拦截

这里的关键措辞是:“证明客户端拥有‘代码验证器’。这是一种缓解措施,因为攻击者不知道这个一次性密钥,因为它是通过TLS发送的,无法被截获。”

TL;博士:

代码质询+验证器对是证明请求身份验证令牌的客户端与首先请求授权代码的客户端相同(或受其信任)的关键因素。如果代码验证器被泄漏,那么RFC中提到的攻击(本质上是利用串扰模拟合法应用程序的恶意应用程序)就不会减轻,因此PKCE(防止此类攻击)的目的就被挫败了