从第三方服务到给定信息系统上的客户端应用程序的动态授权委托
Dynamic authorization delegation from a third party service to a client application on a given information system
作为一家想要向第三方已知客户提供访问其服务的公司,我设计了一个 authentication/permission 系统。
这是我们的需求:
- 作为服务提供商 (A),我想提供另一个 company/customer (B) 访问我的服务
- 作为 A,我希望能够在我的平台上识别 B,并允许它访问只能由 B(租户)访问的资源池
- 作为 B,我想在 A 上进行身份验证,并让我的用户 (C) 使用一组动态创建的权限临时访问 A
- 作为C,我想直接访问A
这是我认为可以满足这些需求的流程
如您所见,它看起来像一个 OAuth2 流程。但是客户端应用程序从不与授权服务器对话,因为我希望第三方服务动态选择客户端应用程序能够访问的角色和数据。
- 请问您对这个设计有什么看法吗?
- 你认为它相关吗?
- 您是否看到了满足此类需求的其他方法?
- 你知道一些已经存在的解决方案来实现这个吗?
(OAuth2 适应了吗?例如,Auth0 可以回答我们的问题吗?
需要授权服务器?)
您的要求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 提供上述详细信息。
作为一家想要向第三方已知客户提供访问其服务的公司,我设计了一个 authentication/permission 系统。
这是我们的需求:
- 作为服务提供商 (A),我想提供另一个 company/customer (B) 访问我的服务
- 作为 A,我希望能够在我的平台上识别 B,并允许它访问只能由 B(租户)访问的资源池
- 作为 B,我想在 A 上进行身份验证,并让我的用户 (C) 使用一组动态创建的权限临时访问 A
- 作为C,我想直接访问A
这是我认为可以满足这些需求的流程
如您所见,它看起来像一个 OAuth2 流程。但是客户端应用程序从不与授权服务器对话,因为我希望第三方服务动态选择客户端应用程序能够访问的角色和数据。
- 请问您对这个设计有什么看法吗?
- 你认为它相关吗?
- 您是否看到了满足此类需求的其他方法?
- 你知道一些已经存在的解决方案来实现这个吗? (OAuth2 适应了吗?例如,Auth0 可以回答我们的问题吗? 需要授权服务器?)
您的要求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 提供上述详细信息。