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

问题描述

作为一家希望向第三方已知客户提供访问其服务的公司,我设计了一个身份验证/许可系统。

以下是我们的需求:

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

权限流

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

标签: authorizationoauth-2.0permissions

解决方案


您的要求

似乎这些是重要的要求:

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

解决方案特性

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

您组织的数据

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

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

获取 /your-api/resources/789

您的 API 将需要根据用户是谁以及可能基于他们来自哪个第三方来授权对资源的访问。

第三方数据

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

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

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

您的用户数据

感觉每个用户都应该在您的系统中使用某些属性进行建模:

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

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


推荐阅读