使用OAuth密码凭据授予令牌访问身份验证的优点

时间:2017-04-05 10:21:43

标签: ruby-on-rails authentication oauth oauth-2.0 rails-api

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

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

  1. 门卫+设计:我可以使用门卫实施OAuth 2.0,但至少目前我只会使用密码凭据授予。
  2. 滑轨'拥有ActionController::HttpAuthentication::Token模块+设计:这似乎是更简单的方法。
  3. 老实说,我无法看到Token Access Authentication方法与OAuth 2.0's Password Credentials Grant之间的区别。

    如何选择一个而不是另一个?还有其他需要考虑的选择吗?

2 个答案:

答案 0 :(得分:4)

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

但是,如果您希望扩展此API以供外部服务使用,那么,您可以使用Doorkeeper实现OAuth 2.0更好的位置,因为您可以轻松配置,例如,授权代码授予他们。 所以,我说'#34;门卫+设计"选项更具有前瞻性,因为它提供了更多选项,而HTTP Token authentication更容易实现。

答案 1 :(得分:3)

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

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

从某种意义上说,您可以使用密码凭据授予来使用OAuth获取令牌,然后在Token授权标头中使用此令牌来获取访问权限。

然后问题变成了 - 当我们可以使用存储在应用程序中的(永久和秘密)令牌来授权时,为(临时)令牌交换(永久和秘密)凭证进行额外的往返是否有用无论如何,立即。

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

另一方面,您可以随时添加任何额外的"令牌生成"部分之后,当需要时。因此,如果您当前的计划是在代码中对凭据进行硬编码,我怀疑您最好依靠Token授权。

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

相关问题