Oauth2 PKCE 谁应该生成代码验证器和代码质询
Oauth2 PKCE who should generate code verifier and code challenge
我正在编写将与某些 Oauth2 提供程序集成的客户端应用程序。我将本机 android 应用程序作为前端,spring-boot 作为后端。我想在 PKCE 中使用 authorization_code 流程。 我的问题是谁应该生成代码验证器和代码挑战?我的后端还是我的本机应用程序?
我可以看到两个选项:
1) 前端正在调用授权端点。后端正在向前端生成 code_verifier 代码挑战和 returns 代码挑战,并将其重定向到授权服务器。用户登录,授予权限,然后接收授权码并转发给后端。然后后端使用 code_verifier、客户端 ID 和客户端密码调用授权服务器并接收访问令牌
2) FE 正在生成 code_verifier 和代码挑战。它使用 code_challenge 调用授权提供程序,用户登录,授予权限,然后收到授权代码。前端使用 code_verifier 转发授权码,然后后端使用授权码、code_verifier、客户端 ID 和客户端密码调用授权提供程序。
哪种方法更好更安全?
我们选择方法 2).
对手可能会拦截前端和后端之间的流量,并使用代码从您的后端端点获取令牌。使用选项 1,您仅保护后端和授权提供程序之间的通信,而不保护前端和后端之间的通信。
我正在编写将与某些 Oauth2 提供程序集成的客户端应用程序。我将本机 android 应用程序作为前端,spring-boot 作为后端。我想在 PKCE 中使用 authorization_code 流程。 我的问题是谁应该生成代码验证器和代码挑战?我的后端还是我的本机应用程序?
我可以看到两个选项:
1) 前端正在调用授权端点。后端正在向前端生成 code_verifier 代码挑战和 returns 代码挑战,并将其重定向到授权服务器。用户登录,授予权限,然后接收授权码并转发给后端。然后后端使用 code_verifier、客户端 ID 和客户端密码调用授权服务器并接收访问令牌
2) FE 正在生成 code_verifier 和代码挑战。它使用 code_challenge 调用授权提供程序,用户登录,授予权限,然后收到授权代码。前端使用 code_verifier 转发授权码,然后后端使用授权码、code_verifier、客户端 ID 和客户端密码调用授权提供程序。
哪种方法更好更安全?
我们选择方法 2).
对手可能会拦截前端和后端之间的流量,并使用代码从您的后端端点获取令牌。使用选项 1,您仅保护后端和授权提供程序之间的通信,而不保护前端和后端之间的通信。