ruby-on-rails - oauth2流程




使用OAuth密码凭据授予优于令牌访问身份验证 (2)

我正在为使用Rails 5的移动应用程序创建一个API。目前,我不需要三脚授权,因为API只会被我们自己的移动应用程序使用。

我正在考虑选择以下两个选项之一:

  1. 门卫+设计:我可以使用门卫来实现OAuth 2.0,但是我至少现在只能使用密码凭证授予。
  2. Rails自己的ActionController::HttpAuthentication::Token模块+设计 :这似乎是更简单的方式去。

老实说,我看不出令牌访问认证方法和OAuth 2.0的密码凭证授权之间的区别。

如何选择一个呢? 还有其他的选择需要考虑吗?


如果您所拥有的只是“单一目的API”(仅适用于移动应用程序),则在安全性方面没有太大差异。

但是,如果您想扩展此API以供外部服务使用,那么使用Doorkeeper实现OAuth 2.0时,您将处于更好的位置,因为您可以轻松配置例如“授权代码授权”他们。 所以,我会说“门卫+设计”选项更具前瞻性,因为它提供了更多的选择,而HTTP令牌认证更容易实现。


这两者在概念上是不同的东西:

  • “令牌访问验证”指定一个协议,描述如何(可能长寿命)令牌安全地呈现给服务器 。 它没有说明令牌的来源或者应该如何解释。
  • “密码证书授予”是完全成熟的OAuth流程的一部分,描述了获取(通常是短期的)令牌的方法

从某种意义上说,您可以使用Password Credentials Grant来使用OAuth获取令牌,然后在Token授权头中使用该令牌来获取访问权限。

那么问题就变成了:当我们可以使用存储在应用中的(永久和秘密)令牌来立即授权时,为(临时)令牌交换(永久和秘密)凭证进行额外的往返是有用的。

正如我所看到的,使用完整的OAuth流程有两个潜在的好处。 首先,它允许您自然地为第三方添加其他授权方式。 其次,它可以让你在任何时候撤销令牌,并使用其他方式强制重新授权(当然,如果你实施这些方式),而不必发明任何车轮。

另一方面,随时可以在需要时添加任何附加的“令牌生成”部分。 因此,如果你目前的计划是在代码中对代码进行硬编码,那么我会怀疑你可能更愿意使用Token授权。

它不仅比一个请求更短,而且还可能比OAuth中使用的Bearer认证更安全:如果攻击者嗅探Bearer令牌,他们(通常)会(通常)获得对服务器的完整令牌访问权限,直到其到期。 Token令牌(通常)不是这种情况。 当然,如果攻击者无论如何都可以从您的应用中提取共享密钥,那么这一切都不是那么重要。





rails-api