PKCE(Proof Key for Code Exchange)是一种用于增强OAuth 2.0授权流程安全性的技术,特别适用于公共客户端(如移动应用)的场景。它通过在授权请求中引入一个随机生成的Code Verifier和一个对应的Code Challenge,以及在交换令牌时验证这些值,从而增加了授权流程的安全性。
以下是在OAuth 2.0中使用PKCE获取Access Token的步骤:
-
创建Code Verifier和Code Challenge:
在应用程序中生成一个随机字符串作为Code Verifier。然后,使用哈希函数(例如SHA-256)对Code Verifier进行哈希,生成Code Challenge。确保将Code Verifier保留在客户端,而将Code Challenge发送到认证服务器。 -
构建授权请求:
创建授权请求,将以下参数包含在请求中:response_type
: 设置为 "code",表示使用授权码流程。client_id
: 客户端标识符。redirect_uri
: 重定向URI,用于接收授权码。scope
: 请求的权限范围。code_challenge_method
: 设置为 "S256",表示使用SHA-256哈希算法。code_challenge
: 上一步生成的Code Challenge。
-
用户授权:
用户将被重定向到认证服务器的登录页面,要求他们登录并授权客户端访问所需的权限。 -
收到授权码:
在用户授权后,认证服务器将重定向用户回到之前指定的重定向URI,并在URL参数中包含一个授权码。 -
交换令牌:
在获得授权码后,客户端将使用此授权码进行令牌请求。构建令牌请求,将以下参数包含在请求中:grant_type
: 设置为 "authorization_code",表示使用授权码交换获取访问令牌。code
: 上一步收到的授权码。redirect_uri
: 与之前发送的重定向URI匹配。client_id
: 客户端标识符。code_verifier
: 之前生成的Code Verifier。
-
获得Access Token:
认证服务器将验证授权码和Code Verifier的匹配性,如果匹配成功,将返回Access Token给客户端。
总结起来,PKCE是通过引入Code Verifier和Code Challenge来增加OAuth 2.0授权流程的安全性。在授权码交换阶段,认证服务器会验证Code Verifier和Code Challenge的匹配性,从而确保请求的合法性。这种方式特别适合用于安全性要求较高的场景,例如移动应用程序。
标签:Code,AccessToken,Challenge,拿到,Verifier,code,PKCE,授权,客户端 From: https://www.cnblogs.com/zhao-jie-li/p/17664295.html