代码交换证明密钥 (PKCE) 是否可以在没有 TLS 的情况下工作?

问题描述 投票:0回答:1

下面我试图证明我的问题是合理的,“代码交换证明密钥 (PKCE) 在没有 TLS 的情况下工作吗?我相信我缺少对规范的部分理解,并希望得到一些方向。我还有第二个问题,PKCE 是否可以工作?”只涉及使用 Cookie 来存储身份验证令牌(规范中未提及)?

请帮助我识别下面评论中的错误信息或缺乏信息。

rfc7636的介绍部分描述了针对公共客户端的攻击授权码拦截攻击。它指出,

攻击者拦截从服务器返回的授权码 通信路径内的授权端点不受保护 传输层安全 (TLS) ...

简介先决条件部分第 4 项表示 TLS 不保护响应。

引言“为了减轻这种攻击”段落指出

这可以作为缓解措施,因为攻击者不会知道这一点 一次性密钥,因为它是通过 TLS 发送的并且无法被拦截。

此扩展利用动态创建的加密随机 称为“代码验证器”的密钥。

RFC6949提到了围绕使用cookie的攻击;但是,rfc7636 并未指定仅与 Cookie 或 Auth 令牌的本地存储相关。因此,如果身份验证令牌也是动态存储的,那么它似乎可以解决对请求的攻击。是这样吗?

oauth-2.0
1个回答
1
投票

PKCE 用于证明发起身份验证(通过浏览器重定向)的一方与完成身份验证的一方(通过 HTTP POST)是同一方。

它无需 TLS 即可工作,如我的博客文章中的步骤 4 和 8 所示,其中步骤 8 中的代码验证程序必须与步骤 4 中的代码质询相匹配。

Cookie 与 PKCE 没有直接关系。然而,在没有 PKCE 或客户端密钥的基于浏览器的应用程序中,恶意浏览器代码只需要发送授权代码即可获取令牌。如果令牌存储在cookie中,那么恶意代码只能执行会话劫持。

PKCE 最初是为无法使用客户端密钥的公共客户端引入的。如今,建议所有使用代码流程的客户端,包括那些拥有客户端密钥的客户端。当然也应该使用 TLS。

© www.soinside.com 2019 - 2024. All rights reserved.