首页 > 解决方案 > 使用 FusionAuth 的多租户 OAuth

问题描述

我正在阅读 Matt 关于在 React 应用程序中实现 OAuth 授权代码授予的优秀文章。 https://fusionauth.io/blog/2020/03/10/securely-implement-oauth-in-react

我们有一个多租户实现,并且想知道推荐的方法是用于确定用户身份验证的租户。例如,如果我们在不同的租户中有两个不同的用户,都注册了同一个应用程序,并且都有相同的用户名,是否可以询问用户他们属于哪个租户?

我想我可以在授权查询字符串中传递tenantId,但这需要我已经问过“你来自哪里”的问题。我是否需要实现这一点,或者 FusionAuth 可以开箱即用地提供它吗?

我已经阅读了有关登录主题的文档,但这似乎更多是关于显示租户,而不是请求它? https://fusionauth.io/docs/v1/tech/themes/

伟大的产品..提前谢谢。

标签: oauthfusionauth

解决方案


所以你这样说:

如果我们在不同的租户中有两个不同的用户,他们都注册了同一个应用程序

FusionAuth 应用程序与租户绑定,因此无法在租户之间共享 FusionAuth 应用程序。来自https://fusionauth.io/docs/v1/tech/apis/authentication#making-an-api-request-using-a-tenant-id

FusionAuth 中的某些资源仅限于租户,例如用户、组和应用程序。当存在多个租户时,这些 API 将需要租户 ID 以确保请求没有歧义。

现在,当然可以在客户之间共享您的应用程序,其中每个客户都是 FusionAuth 租户。所以你问的问题很好。我将其改写为“Web 应用程序或 FusionAuth 的其他客户端如何知道它与哪个租户相关联?” 如果这不是您要问的问题,请告诉我。

如果您有一个为多个客户部署的 web 应用程序(例如 todo 应用程序),并且每个客户都是 FusionAuth 中的租户,则 todo 应用程序可以根据域名(foo.todo.com 或 bar.todo.com)知道或路径(todo.com/foo 或 todo.com/bar),它被部署到哪个 FusionAuth 租户 ID(foo 或 bar)传递给 FusionAuth。这是一个相关的论坛帖子:https ://fusionauth.io/community/forum/topic/19/can-different-tenants-have-their-own-custom-domains-self-hosted-community-edition

如果在 URL 级别没有区别,您可以将租户 ID 存储在数据库中的组或用户表中。

还值得注意的是,在 FusionAuth 的默认设置中,客户端 ID 是应用程序 ID。应用程序 ID 将登录会话绑定到特定租户,因为每个 FusionAuth 应用程序只属于一个 FusionAuth 租户(尽管一个租户可以有多个 FusionAuth 应用程序)。


推荐阅读