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

hat*_*enn 7 authentication ruby-on-rails oauth oauth-2.0 rails-api

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

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

  1. 门卫+设计:我可以使用门卫实现OAuth 2.0,但至少目前我只会使用密码凭据授权.
  2. Rails自己的ActionController::HttpAuthentication::Token模块+设计:这似乎是更简单的方法.

老实说,我看不到令牌访问身份验证方法和OAuth 2.0的密码凭据授权之间的区别.

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

KT.*_*KT. 3

两者在概念上是不同的:

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

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

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

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

另一方面,您可以随时在需要时添加任何其他“令牌生成”部分。因此,如果您当前的计划是在代码中硬编码凭据,我怀疑您最好依赖Token授权。

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