如果客户端与资源所有者相同,OAuth 2.0 redundant/unnecessary 是吗?

Is OAuth 2.0 redundant/unnecessary if the client is the same as the resource owner?

在 RFC 6749 的 1.1 节中,有四种角色:资源所有者、资源服务器、客户端和授权服务器。

如果客户端和资源所有者是同一实体,OAuth 是否变得多余或不必要?

例如,我有一个封闭的 API 和一个前置网络服务器。 (前置 Web 服务器既是客户端又是资源所有者。)我正在尝试决定是否切换到 OAuth 2 身份验证而不是使用当前的 username/password 身份验证方法。如果 API 仍然对第三方应用程序关闭,是否有任何额外的安全性可以转移到 OAuth 2? (也就是说,任何第三方都无法访问 API。)

谢谢!

在资源所有者和 Client/Resource 服务器角色重合的情况下,从安全的角度来看,OAuth 2.0 可能变得不那么重要,因为 OAuth 的主要目标之一是不公开用户的主要凭据对客户来说变得毫无意义。这也是为什么所谓的资源所有者密码凭证授予被认为是 legacy/deprecated 流的原因。

但是,出于多种原因,遵循 OAuth 2.0 模式可能仍然有意义:

  • 通过库存库利用标准化协议的能力和 不依赖自定义代码的框架
  • 事实上,在您的情况下,资源服务器仍然严格符合 OAuth 2.0,处理提供访问令牌的客户端,无论 Client/Resource 所有者 relationship/implementation 是什么;这将使在未来的情况下更容易允许第 3 方客户端访问
  • 您将用户凭据的验证集中在客户端和授权服务器之间的单一路径上,因此您的每个资源服务器都不需要单独检查用户凭据,可能会处理不同的身份验证机制
  • 也许最重要的是,也是安全方面的:一旦用户使用他的主要凭据通过客户端进行身份验证,授权服务器就可以发出刷新令牌和访问令牌;当旧的访问令牌过期时,客户端可以将刷新令牌存储并使用到新的访问令牌;如果客户端想要在不需要明确的用户交互和身份验证的情况下长时间继续访问 API,这将使客户端免于存储主要用户凭据,并使生成的系统不易受到 leakage/loss 用户的攻击凭据,因为用户凭据(密码)未存储在客户端中

如果您遇到以下问题,那么您应该使用 OAuth;

假设您是一个类似 Gmail 的网络邮件提供商。您的一些用户正在使用第三方应用程序登录到您的用户帐户并为您自动回复某些电子邮件。或者你是类似 Facebook 的社交网络网站,你的一些用户使用第三方应用程序来分析你的朋友网络并为你打印 2D 图表。在这种情况下,您的用户会泄露他们的用户名和密码。在他们泄露用户名和密码后,他们将如何阻止某个第三方应用程序访问他们的帐户?只需更改密码即可。现在你有另一个问题;其他第三方应用程序将无法访问用户的帐户。然后用户必须将他的密码重新泄露给他信任的其他应用程序。现在这也是个问题,因为它对用户不友好。 OAuth 只是您的用户提供给第三方应用程序开发人员的临时密码。他可以随时撤销它而无需更改自己的密码。

除此之外,OAuth 是不必要的。如果您不打算拥有第三方应用程序开发人员,只需使用会话 cookie。它是存储在用户端的随机字符串。在服务器端将拥有您想要的任何东西。只要看看 PHP 会话是如何在服务器端使用和存储的。您可以从 php.ini.

自动定义它们的生命周期和刷新时间