2

我正在编写将与一些 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 调用授权提供者。

哪种方法更好、更安全?

4

1 回答 1

3

我们选择了方法 2)。

攻击者可能会拦截前端和后端之间的流量,并使用代码从后端端点获取令牌。使用选项 1,您只能保护后端和授权提供者之间的通信,而不是前端和后端之间的通信。

于 2020-05-25T09:29:00.917 回答