OAuth 2.0 PKCE Flow 不会为 masquerading/phishing 攻击打开大门吗?

Doesn't OAuth 2.0 PKCE Flow open the door to masquerading/phishing attacks?

对于已安装应用程序(例如桌面 app/cli/client 库)的 OAuth 2.0 PKCE 流程,似乎没有什么可以阻止攻击者:

  1. 使用原始应用程序获取client_id(client_id是public并且可以从浏览器bar/source代码轻松复制)
  2. 制作一个假的应用程序来模仿原始应用程序
  3. 使用虚假应用引诱用户授予访问权限,从而获得刷新令牌,这实际上意味着在请求的范围内具有完全访问权限

没有 PKCE,很难伪造应用程序并获取刷新令牌,因为这需要攻击者获取 client_secret。在我看来,虽然 PKCE 提供了隐式流的安全改进,但它使伪装使用 OAuth 2.0 的真实应用程序变得容易得多?

我正在使用 googlecloudsdk (gcloud),它似乎已 client_id (and even many client_id/client_secret pairs) 硬编码到分发给客户端的源代码中。我怀疑有什么可以阻止攻击者伪造 gcloud 从而获得对用户 GCP 环境的访问权限(为了证明,运行 gcloud auth login 它会在控制台中向您显示攻击者需要的 url .) 谁能clarify/help 让我明白这是怎么回事?

私有 URI 方案可能是您在桌面上可以做的最好的方案,但并不像您所说的那样完美。这是我用于 Desktop Code Sample 的,但理想情况下我也想解决上述问题。

对于移动设备,您可以使用 Claimed HTTPS Schemes 来解决问题 - 请参阅我添加到已发送的 post sllopis 中的答案。

我会知道 Updated OAuth 2.1 Guidance for Native Apps - 请参阅第 10 节 - 但我认为您无法完全解决这个问题。

希望最终用户对他们安装的桌面应用程序保持谨慎,以降低这种情况下的风险。希望操作系统支持将在未来启用更好的加密选项。

只是想跟进这个,因为我自己也有同样的问题,但也自己回答了,我想补充一些这里没有说的:

当您在 oauth2 服务器上设置应用程序时,您必须设置多个 redirect_uri,授权完成后允许的位置 return。这意味着像您描述的那样创建网络钓鱼攻击的人在登录后无法 return 到他们自己的应用程序,并且永远不会收到代码。

有一个单独的攻击,您尝试 return 从非法应用程序到合法应用程序,但是通过包含状态变量可以解决这个问题。