在www.example.com中https://www.rfc-editor.org/rfc/rfc7636#section-4.4指出,可以通过将质询包括在代码中来将其与授权代码相关联,但仅以加密形式(或者将其存储在服务器上,这与我的问题无关)。为什么必须加密?
对我来说,挑战应该是不可能改变的,因为随后对访问代码的请求可能包括从未呈现给服务器的新挑战,并且攻击者方便地准备了代码验证器。然而,为了防止修改,在授权代码中包括签名就足够了--不需要加密询问。
第4.4节还说“服务器不得以其他实体可以提取的形式在客户端请求中包含“code_challenge”值”。假设请求者或第三方可以提取代码质询--为什么这是有害的?请求者已经知道代码质询,第三方攻击者无法从中派生代码验证器。
1条答案
按热度按时间nwsw7zdq1#
为什么必须加密?
使用PKCE实现时,授权服务器没有客户端机密。它使用
code_challenge
(code_verifier
的加密形式)。可以将code_verifier
视为client_secret
。由于client_secret
不能通过前端通道发送,因此我们对其进行加密。生成authorization_code
后,请参阅第4.6节授权服务器如何验证它。这里,authorization_code
和code_challenge
通过反向通道发送。