从第三方服务到给定信息系统上的客户端应用程序的动态授权委托

Dynamic authorization delegation from a third party service to a client application on a given information system

作为一家想要向第三方已知客户提供访问其服务的公司,我设计了一个 authentication/permission 系统。

这是我们的需求:

这是我认为可以满足这些需求的流程

如您所见,它看起来像一个 OAuth2 流程。但是客户端应用程序从不与授权服务器对话,因为我希望第三方服务动态选择客户端应用程序能够访问的角色和数据。

您的要求UI备注

看来这些是重要的要求:

  • 来自第三方的用户需要能够使用您组织的应用程序(您图片中的 C)
  • 您的应用 (C) 从您组织的服务 (A) 获取数据
  • 你的服务(A)还需要代用户调用第三方的API(B)

溶液特性

最常见的解决方案归结为普通的旧 API/数据设计,而不是提供快速解决方案的 OAuth。

贵组织的数据

让第三方用户登录您的应用,以便他们可以使用您的数据。旨在支持 Federated Logins 以便最终用户使用熟悉的密码,并在您的应用和第三方应用中启用单点登录。

当应用程序从 A 获取数据时,它将通过指定您组织的用户 ID 的 OAuth 令牌执行此操作。也就是说,您组织的用户 ID 未包含在 URL 或请求正文中:

获取/your-api/resources/789

您的 API 将需要根据用户身份授权对资源的访问,也可能根据他们来自哪个第三方。

第三方数据

您应用的后端 APIs (A) 需要代表用户调用 (B) 作为 B2B API。此 link 将使用第三方的安全解决方案。一个常见的 OAuth 选项是要使用的客户端凭据流。

处理用户特定资源的 B2B API 调用通常会在请求中包含第三方用户 ID URL 或正文:

  • 获取/partner-api/users/abc/resources/234

您的用户数据

感觉每个用户都应该在您的系统中建模,具有某些属性:

  • 您组织的 OAuth 用户 ID(创建时生成)
  • 租户id(他们来自哪个第三方)
  • 第三方用户 ID
  • 姓名 + 电子邮件

第三方用户可能会由该公司的管理员加入,他们通过 UI 或 API 提供上述详细信息。