我正在使用Rails 5为移动应用程序创建API。目前,我不需要三条腿授权,因为API只会由我们自己的移动应用程序使用。
我正在考虑选择以下两个选项中的一个:
ActionController::HttpAuthentication::Token
模块+设计:这似乎是更简单的方法。老实说,我无法看到Token Access Authentication方法与OAuth 2.0's Password Credentials Grant之间的区别。
如何选择一个而不是另一个?还有其他需要考虑的选择吗?
答案 0 :(得分:4)
如果你所拥有的只是"单一目的API" (仅适用于移动应用程序),在安全性方面没有太大差异。
但是,如果您希望扩展此API以供外部服务使用,那么,您可以使用Doorkeeper实现OAuth 2.0更好的位置,因为您可以轻松配置,例如,授权代码授予他们。 所以,我说'#34;门卫+设计"选项更具有前瞻性,因为它提供了更多选项,而HTTP Token authentication更容易实现。
答案 1 :(得分:3)
这两者在概念上是不同的:
从某种意义上说,您可以使用密码凭据授予来使用OAuth获取令牌,然后在Token
授权标头中使用此令牌来获取访问权限。
然后问题变成了 - 当我们可以使用存储在应用程序中的(永久和秘密)令牌来授权时,为(临时)令牌交换(永久和秘密)凭证进行额外的往返是否有用无论如何,立即。
我认为,使用完整的OAuth流有两个潜在的好处。首先,它允许您自然地为第三方添加其他授权方式。其次,它允许你随时撤销令牌,并使用这些其他方法强制重新授权(当然,如果你实施它们),而不必发明任何轮子。
另一方面,您可以随时添加任何额外的"令牌生成"部分之后,当需要时。因此,如果您当前的计划是在代码中对凭据进行硬编码,我怀疑您最好依靠Token
授权。
不仅一个请求更短,它还可能比OAuth中使用的Bearer
身份验证稍微安全一些:如果攻击者嗅探Bearer
令牌,他们会(通常)获得完整令牌访问服务器直到它到期。 Token
令牌(通常)不是这种情况。当然,如果攻击者无论如何都能从您的应用程序中提取共享密钥,那么这一切都不重要。