您能否解释一下PKCE的oauth2授权代码流如何工作以及为什么它为浏览器客户端提供了更高的安全性?

时间:2018-12-01 20:00:32

标签: oauth-2.0

对于浏览器客户端,不再建议使用

Oauth2隐式流程(https://tools.ietf.org/html/draft-ietf-oauth-security-topics-10),应使用PKCE的授权代码代替。为什么后者更安全?它在这种客户端中如何工作?

1 个答案:

答案 0 :(得分:0)

阅读RFC7636后,很清楚,公开客户从现在开始如何使用授权码:

                                             +-------------------+
                                             |   Authz Server    |
   +--------+                                | +---------------+ |
   |        |--(A)- Authorization Request ---->|               | |
   |        |       + t(code_verifier), t_m  | | Authorization | |
   |        |                                | |    Endpoint   | |
   |        |<-(B)---- Authorization Code -----|               | |
   |        |                                | +---------------+ |
   | Client |                                |                   |
   |        |                                | +---------------+ |
   |        |--(C)-- Access Token Request ---->|               | |
   |        |          + code_verifier       | |    Token      | |
   |        |                                | |   Endpoint    | |
   |        |<-(D)------ Access Token ---------|               | |
   +--------+                                | +---------------+ |
                                             +-------------------+

总结:通过使用PKCE,授权服务器现在可以验证请求授权码的客户端和想要为访问令牌交换授权码的客户端是否相同。

(A)客户端生成代码验证字符串(code_verifier)对其应用转换(t_m),并发送转换(t(code_verifier)))和转换的结果功能(t_m)到身份验证服务器。

(B)身份验证服务器记录t(code_verifier)t_m并回答授权码。

(C)当C请求访问令牌时,它同时发送授权码和code_verifier。 Auth服务器将t_m应用于此code_verifier,并将其结果与存储的t(code_verifier)进行比较,以验证通信的完整性。