OAuth授权码流程安全问题(授权码被黑客截获)

OAuth authorization code flow security question (authorization code intercepted by a hacker)

我无法理解的事情。 据我了解,授权代码流应该比隐式流更安全,因为令牌不是直接从授权服务器发送到客户端,而是由您的后端检索。 所以流程基本上是:

  1. 浏览器获取授权码(作为排序的 URL 参数)。
  2. 将其发送到 public 后端端点。
  3. 后端将代码 + 客户端密码发送到授权服务器,检索令牌并将它们存储在客户端的 cookie/local 存储中以供进一步使用。

在此流程中,所有教程都将授权码描述为对黑客毫无用处,这是为什么呢?黑客不能使用 Postman 或其他客户端并直接访问您的 (public) API,让它通过第 3 步,从而检索令牌吗?

我在这里错过了什么?

code 只使用了一次。在许多情况下,攻击者可能会访问 code,它已被交换为访问令牌,因此无用。

authorization_code 是一次性令牌。

授权码又名 auth code 仅 public 使用,以便客户端可以在他和授权服务器之间建立一个安全的反向通道,这样他就可以在不使用的情况下与访问令牌交换它浏览器。

auth code 是 public 并且可以通过代理拦截,因为它出现在 redirect_uri 的查询中并通过浏览器使用(这被认为是不安全的)。访问令牌依赖于auth_code(public)和client_secret(私有)进行交换。如果没有 client_secret,攻击者可以通过这种方式通过暴力破解获得 access token

总结:即使攻击者知道 authcode 他也可以在没有 client_secret 在注册时(或动态地)给客户端并假定是安全的情况下做任何事情。