代码之家  ›  专栏  ›  技术社区  ›  JW.

有没有OAuth授权支持代表用户授予访问权限,而不需要用户交互?

  •  0
  • JW.  · 技术社区  · 6 年前

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

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

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

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

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

    0 回复  |  直到 6 年前
        1
  •  1
  •   Abhishek Tyagi    6 年前

    未经用户登录或同意就访问用户的资源是反oauth的(不管是1.0a还是2.0)。因此,没有grant_类型直接支持这一点。

    1. 安全:那个代理会在你的系统上开一个大洞, 如果知道用户的电子邮件,攻击可以从 你的系统。
    2. 可维护性:如何跟踪 系统?这可能会在应用程序中创建不必要的检查点。

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

    请注意,最好启用双向相互身份验证或某种形式的附加安全性进行验证。

    Proposed solution