authentication - 如何针对单个应用程序对来自不同领域的用户进行身份验证?

标签 authentication keycloak multi-tenant keycloak-services

我有以下情况:

我的应用程序包含一个前端和一个后端微服务,它们都通过一个 keycloak 服务器上的相同领域对自己进行身份验证。此设置已用于开发,但现在我需要扩展它以支持 Multi-Tenancy ,因为将来每个客户(租户)都应该拥有自己的领域和个人用户帐户。但是,由于在登录之前必须已经知道用户的领域,我想知道使用 Keycloak 是否有可能做到这一点。 另一种方法是为所有租户使用一个单一领域,并通过组/角色进行映射(用户 - 租户)。然而,这对我来说不是合适的解决方案,因为租户不应该能够在 keycloak 中看到彼此的用户帐户。我需要让他们在不同的领域。 所以我的问题是,是否有任何解决方案可以针对单个应用程序对来自不同领域的用户进行身份验证?

非常感谢您的帮助。

最佳答案

这是一个有趣(而且非常经典)的问题,我们也在几年前解决了这个问题。

这里有一些有值(value)的(?)想法可以帮助您做出决定。

  1. 一个重要因素是租户数量。如果您预计会有大量租户,那么在选择“每个租户一个领域”的解决方案时可能会出现严重的性能问题。 尤其是这张票: https://issues.redhat.com/browse/KEYCLOAK-4593 (最近的版本似乎有一些改进)。

the realm limitation at the moment is probably far less than 100 realms

...where every call takes more than 30s with Keycloak on MySQL on SSD drive

my fundamental issue now is keycloak node start up.. With 350 odd tenants/realms, i see the start up of keycloak times out

  1. 另一个要素是希望用户之间的隔离程度。您的客户是否同意让他们的用户与其他客户混合在同一个“数据库”(即领域)中?他们会接受领域管理员能够(通过 Web 控制台)浏览单个领域的所有用户(对于所有租户)的姓名、电子邮件等吗? 如果不是,每个租户的单独领域是“唯一”的解决方案

  2. 在我看来,关键问题是:领域的确切语义是什么。上面的票说:

Realms make sense if you need to configure things like Identity Providers, Themes, Token Lifetimes, Key Rotation and so on differently for every of your sub tenants.

这应该是主要的决策标准。

关于您的特定问题(例如“我的问题是是否有任何解决方案可以针对单个应用程序对来自不同领域的用户进行身份验证?”)? 为什么不可能? 从技术上来说,唯一的区别是网络服务的根 url 不再是一个常量(具有唯一的领域)而是动态的(依赖于租户)。但是,当然,基本假设是系统能够提前(BEFORE 登录)知道相应的领域(可以在登录时从所选租户派生)。

关于authentication - 如何针对单个应用程序对来自不同领域的用户进行身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68909371/

相关文章:

windows - 如何让Internet Explorer在某个域自动登录

nginx - Keycloak 和 Nginx : auth_request

java - Multi-Tenancy Spring Data JDBC

amazon-web-services - 如何处理 SSL 证书以在 NGINX 服务器上运行的 Web 应用程序中实现 WhiteLabel 选项

django - 我在哪里放置 Django 身份验证后端文件?

PHP:所有用户一页 VS 每个用户一页?

javascript - Meteor Account 禁用网站创建帐户功能

keycloak - 与keycloak REST Api的精确参数搜索匹配

node.js - Keycloak:使用 nodeJS 的 authZ

grails - 成功登录后grails重定向