【发布时间】:2019-02-14 19:13:10
【问题描述】:
我们有一些网络服务,以及一个保护对它们的访问的 OAuth2 服务器。
我希望我们的外部客户能够在他们的移动应用中使用这些网络服务。但在某些情况下,他们希望维护自己的登录名/密码数据库,而不要求用户单独对我们的 Web 服务进行身份验证。在这种情况下,客户端拥有我们这边的用户标识符,这些标识符对应于他们自己的用户(我们在 OAuth 流程之外同步这些标识符)。
所以,假设用户已经在客户端建立了会话,我希望能够给他们某种访问令牌,授予他们访问我们这边相应用户的权限,而不提示他们单独密码。我该怎么做?
一种方法是要求客户为我们的网络服务设置一个代理,受他们自己的会话保护。他们的移动应用程序会直接向代理服务器而不是我们的网络服务发送请求。他们的服务器可以使用client-credentials grant 获取访问令牌,并将其添加到任何传入请求中,然后再将它们代理到我们的服务器。
有没有更好的方法?对于客户端来说,这似乎有点难以实现,您必须以某种方式验证传入的请求没有尝试访问其他用户的数据。
是否有任何授权允许客户端的服务器代表单个用户请求访问令牌,而无需用户交互?然后也许令牌可以返回给应用程序,应用程序可以使用它直接访问我们的网络服务。通过客户端凭据授予,令牌授予所有用户访问权限,因此返回单个用户的应用程序是不安全的。
【问题讨论】:
-
这些客户是谁?组织内部还是外部?他们如何识别用户?通常,您有
password授权类型流。一个用例将有助于提出建议。 -
@AbhishekTyagi 外部客户。它们有我们系统中用户的标识符,但没有密码。我在问题的开头添加了一些细节......希望有所帮助。
标签: oauth-2.0