是否有任何OAuth授权支持代表用户授予访问权限而无需用户交互?

时间:2019-02-14 19:13:10

标签: oauth-2.0

我们有一些Web服务,还有一个OAuth2服务器可以保护对它们的访问。

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

因此,假设用户已经在客户端建立了会话,我希望能够为他们提供某种访问令牌,该令牌将授予他们对我们这一侧相应用户的访问权限,而不会提示他们进行单独的访问密码。我该怎么办?

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

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

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

1 个答案:

答案 0 :(得分:1)

未经用户登录或同意即可访问用户资源是防oauth(无论是1.0a还是2.0)。因此,没有grant_type可以直接支持它。

另外,出于两个原因,代理的建议可能也不是一个好主意。

  1. 安全性:该代理将为您的系统带来巨大的漏洞, 知道用户的电子邮件,攻击就可以从中获取所有数据 你的系统。
  2. 可维护性:您如何跟踪授权 客户凭证令牌可以访问特定的电子邮件 系统?这可能会在您的应用程序中创建不必要的检查点。

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

请注意,启用双向身份验证或某种形式的附加安全性进行验证将是一个好主意。

Proposed solution

让我知道这是否不能解决问题。