我正在编写将与一些 Oauth2 提供程序集成的客户端应用程序。我会将原生 android 应用程序作为前端,将 spring-boot 作为后端。我想将 authorization_code 流与 PKCE 一起使用。我的问题是谁应该生成代码验证器和代码挑战?我的后端还是我的本机应用程序?
我可以看到两个选项:
1)前端正在调用授权端点。后端生成code_verifier和code challenge,返回code challenge给前端,重定向到授权服务器。用户登录,授予权限,然后接收授权码并将其转发到后端。然后后端使用 code_verifier、客户端 ID 和客户端密钥调用授权服务器并接收访问令牌
2) FE 正在生成 code_verifier 和 code challenge。它使用 code_challenge 调用授权提供者,用户登录,授予权限,然后接收授权码。前端使用 code_verifier 转发授权码,然后后端使用授权码、code_verifier、client id 和 client secret 调用授权提供者。
哪种方法更好、更安全?