【问题标题】:Do any OAuth grants support granting access on behalf of a user, without requiring user interaction?是否有任何 OAuth 授权支持代表用户授予访问权限,而无需用户交互?
【发布时间】:2019-02-14 19:13:10
【问题描述】:

我们有一些网络服务,以及一个保护对它们的访问的 OAuth2 服务器。

我希望我们的外部客户能够在他们的移动应用中使用这些网络服务。但在某些情况下,他们希望维护自己的登录名/密码数据库,而不要求用户单独对我们的 Web 服务进行身份验证。在这种情况下,客户端拥有我们这边的用户标识符,这些标识符对应于他们自己的用户(我们在 OAuth 流程之外同步这些标识符)。

所以,假设用户已经在客户端建立了会话,我希望能够给他们某种访问令牌,授予他们访问我们这边相应用户的权限,而不提示他们单独密码。我该怎么做?

一种方法是要求客户为我们的网络服务设置一个代理,受他们自己的会话保护。他们的移动应用程序会直接向代理服务器而不是我们的网络服务发送请求。他们的服务器可以使用client-credentials grant 获取访问令牌,并将其添加到任何传入请求中,然后再将它们代理到我们的服务器。

有没有更好的方法?对于客户端来说,这似乎有点难以实现,您必须以某种方式验证传入的请求没有尝试访问其他用户的数据。

是否有任何授权允许客户端的服务器代表单个用户请求访问令牌,而无需用户交互?然后也许令牌可以返回给应用程序,应用程序可以使用它直接访问我们的网络服务。通过客户端凭据授予,令牌授予所有用户访问权限,因此返回单个用户的应用程序是不安全的。

【问题讨论】:

  • 这些客户是谁?组织内部还是外部?他们如何识别用户?通常,您有password 授权类型流。一个用例将有助于提出建议。
  • @AbhishekTyagi 外部客户。它们有我们系统中用户的标识符,但没有密码。我在问题的开头添加了一些细节......希望有所帮助。

标签: oauth-2.0


【解决方案1】:

在未经用户登录或同意的情况下访问用户资源是反 oauth(不管是 1.0a 还是 2.0)。因此没有 grant_type 直接支持这一点。

还有代理的提议,可能不是一个好主意,原因有两个。

  1. 安全性:该代理将在您的系统上打开一个大洞, 知道用户的电子邮件,攻击可以从中获取所有数据 你的系统。
  2. 可维护性:您将如何跟踪 客户端凭据令牌可以访问某个电子邮件 系统?这可能会在您的应用程序中创建不必要的检查点。

现在,这里是一个建议的解决方案,它可以在不改变您的应用程序的大部分情况下工作

请注意,最好启用双向验证或某种形式的额外安全验证。

如果这不能解决问题,请告诉我。

【讨论】:

  • 谢谢。这实际上与我最终所做的非常接近,所以很高兴得到一些验证。关于您的第一点——客户端凭据是否允许在未经用户同意的情况下访问用户数据?规范在这一点上似乎有点含糊,但我认为它可以用来为客户提供某种管理员权限,其中可能包括访问用户数据。我同意代理;我们很快放弃了这个想法。
  • doesn't the client credentials grant sort of allow access to users' data without their consent。不,它没有。 client_cred 流中的任何地方 OAuth 都不知道用户。只有 3 个其他常规 grant_type 知道用户(隐式、auth_code 和密码)。这就是为什么我建议使用指定的 client_id 的自定义端点可以从 OAuth 提供者那里为用户请求令牌。另外,client_cred 授权是有时间限制的,即客户端不会获得刷新令牌。为您的用例使用隐式/密码,您可以获得一个 refresh_token,从而获得更长的用户会话。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-31
  • 2019-10-03
  • 1970-01-01
  • 2014-08-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多