混淆 Laravel 护照 API 安全的工作原理

Confusing how Laravel passport API security works

客户端向服务器发送用户名和密码。

服务器然后检查此用户是否已通过身份验证。

如果是,服务器 returns 客户端的访问令牌...

然后用户可以使用此访问令牌访问受保护的资源...

这里的优点是,我们不会通过 API 调用发送用户信息,并且访问令牌不会持续很长时间,因此黑客将无法找到用户身份验证信息(用户名和密码),如果他发现了,访问令牌将不会持续足够长的时间来对其进行任何操作。

这就是我对 Laravel 护照 API 安全性的理解。

这里令人困惑的是,在第一次 API 调用时,用户必须发送用户名和密码,所以黑客仍然有很大的机会找出用户信息!!!

我知道我的理解有问题,这就是我感到困惑的原因,任何解释将不胜感激。

必须有一种方法可以向授权服务器证明您的身份,一种方法是提供 用户名密码。只要它使用 HTTP,您将在授权服务器和客户端应用程序之间实现通信的方式完全取决于您。如RFC-6749所述:

This specification is designed for use with HTTP ([RFC2616]). The use of OAuth over any protocol other than HTTP is out of scope.

当然,我们始终建议尽可能使用 HTTPS。仅仅因为文档中提到了 HTTP,并不意味着不能使用 HTTPS,因为 HTTPS 只是 HTTP 的加密版本。

我想提的另一件事是您不需要提供 用户名密码,有几种授权类型例如,您可以提供 client_id 而不是 usernamepasswordclient_secret 用于 Client Credentials 授权类型。

如果您是新手,我相信这一切让您有些困惑。向您总结 OAuth2 的目的(据我所知)是:

  • 将客户端(可以是浏览器、移动设备等)的角色与资源所有者(通常是帐户所有者)分开。为什么?因为如果没有分离,客户端就可以访问用户的敏感数据。
  • 假设第一点对于通信来说足够安全。但是,如果有人拿到了您拥有的 session 会怎样?他们可以访问所有!这就是 OAuth 引入范围的原因,根据范围用户提供的 访问令牌 对资源的访问权限有限。作用域可以是读取、写入、共享等——此实现取决于开发人员。因此,如果有人拿到了您的 访问令牌 ,由于范围的原因,他们对资源的访问权限有限。

这些是我的原因之一,而 RFC-6749 有更好的解释:

  • Third-party 需要应用程序来存储资源 所有者供将来使用的凭据,通常是 clear-text.
  • 服务器需要支持密码验证,尽管 密码固有的安全弱点。
  • Third-party 应用程序对资源的访问权限过于广泛 所有者的受保护资源,让资源所有者没有任何 限制持续时间或访问有限子集的能力 资源。
  • 资源所有者不能撤销对单个第三方的访问权限 无需撤销对所有第三方的访问权限,并且必须通过 更改第三方密码。
  • 任何 third-party 应用程序的妥协都会导致 end-user 的密码以及受其保护的所有数据 密码。

要了解有关 OAuth2 的更多信息,它的授权类型和目的,我建议您阅读以下内容:

  1. An Introduction to OAuth 2
  2. 提到RFC-6749,尽管由于技术写作的缘故可能难以阅读。

希望我至少澄清了一小块模糊。