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

时间:2018-04-05 09:59:24

标签: laravel api security laravel-passport

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

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

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

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

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

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

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

我知道我的理解有问题,这就是为什么我感到困惑,任何解释都会非常感激。

1 个答案:

答案 0 :(得分:5)

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

  

此规范旨在与HTTP([RFC2616])一起使用。该      在HTTP以外的任何协议上使用OAuth都超出了范围。

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

我想提及的另一件事是您不需要提供用户名密码,例如,您可以使用多种授权类型代替用户名密码,您可以提供客户端凭据中使用的 client_id client_secret 授予类型。

如果你是新手,我相信这对你来说有点让人困惑。总结OAuth2给你的目的(据我所知),是:

  • 将客户端(可以是浏览器,移动设备等)的角色与资源所有者(通常是帐户的所有者)分开。为什么?因为如果没有分离,客户端可以访问用户的敏感数据。
  • 想象一下,第一点足够安全,可以进行沟通。但是,如果有人得到你所拥有的会议,会发生什么?他们可以访问所有人!这就是OAuth引入范围的原因,根据用户提供的范围,访问令牌对资源的访问权限有限。范围可以是读,写,共享等 - 这个实现取决于开发人员。因此,如果某人获取了您的访问令牌,由于范围限制,他们只能获得对资源的有限访问权。

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

  • 需要第三方应用程序来存储资源   所有者的凭据以供将来使用,通常是密码   明文。
  • 尽管如此,服务器仍需要支持密码验证   密码中固有的安全漏洞。
  • 第三方应用程序获得对资源的过度广泛访问   所有者的受保护资源,使资源所有者不受任何影响   能够限制持续时间或访问有限的子集   资源。
  • 资源所有者无法撤消对单个第三方的访问权限   没有撤销对所有第三方的访问权限,并且必须这样做   更改第三方的密码。
  • 任何第三方应用程序的妥协都会导致泄密   最终用户的密码以及受其保护的所有数据   密码。

要了解有关OAuth2的更多信息,我们建议您阅读以下内容:

  1. An Introduction to OAuth 2
  2. 提及RFC-6749,即使由于技术写作而难以阅读。
  3. 希望我澄清至少一小部分模糊。