docker run --name kc-orgs -d -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin -p 8080:8080 quay.io/keycloak/keycloak start-dev --features organization
2024 年 6 月 20 日 作者:Pedro Igor
亲爱的 Keycloak 社区:
感谢社区和 Red Hat IT 的许多朋友的共同努力,我们将在 Keycloak 25 中发布 Keycloak 组织功能。
我们很高兴地宣布,我们开启了一段漫长的旅程,以支持客户身份和访问管理 (CIAM),并在一定程度上支持多租户,即当一个领域需要与客户和业务合作伙伴等第三方集成时。
Keycloak 组织功能利用 Keycloak 现有的身份和访问管理 (IAM) 功能来解决 CIAM 用例,例如企业对企业 (B2B) 和企业对企业对客户 (B2B2C) 集成。通过利用领域中可用的现有功能,此功能的第一个版本提供了最核心的功能,允许领域与业务合作伙伴和客户集成。
管理组织
管理组织成员
使用不同的策略(例如邀请链接和代理)来引导成员
使用有关主体所属组织的附加元数据修饰令牌
此功能最初作为技术预览功能发布,最终目标是在 Keycloak 26 中使其获得支持。此功能的路线图中还有许多其他功能,我们认为这套初始功能是此功能的核心,它将允许我们在其基础上构建更多功能。因此,您的反馈对于确保我们走上解决 CIAM 相关真实用例的正确道路非常重要。
请考虑检查我们的夜间构建,以便了解最新更新和即将发布的下一个主要版本。
有关此功能的更多详细信息,请参阅官方文档。
Keycloak 组织功能对用户向领域进行身份验证的方式进行了更改,以识别用户是在组织范围内还是在领域范围内进行身份验证。
该功能在身份验证方面引入的一个关键更改是,每当您向启用组织设置的领域进行身份验证时,它都会引入身份优先登录流程。
Keycloak 组织功能是需要在启动服务器(或构建服务器的优化镜像)时启用的技术预览功能
docker run --name kc-orgs -d -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin -p 8080:8080 quay.io/keycloak/keycloak start-dev --features organization
运行上述命令后,确保您可以通过http://127.0.0.1:8080/
访问服务器,并使用以下凭据登录到管理控制台
用户名:admin
密码:admin
让我们首先创建一个名为orgdemo
的新领域。orgdemo
领域是一家希望与第三方(即组织
)集成的第一方公司,以便其用户可以访问orgdemo
领域中提供的受保护资源,这些资源由客户端应用程序提供服务。
为此,请通过管理控制台创建一个新的领域,使用orgdemo
作为名称。
orgdemo
领域中创建用户您还需要一些用户在orgdemo
领域中进行身份验证并执行后续步骤。
mjane
用户是一个领域用户,他的电子邮件帐户与领域中的任何组织都不匹配。我们将使用此用户来表示orgdemo
领域中与任何组织无关的现有领域用户。为此,请创建一个用户,如下所示
用户名:mjane
电子邮件:[email protected]
名字:Mary
姓氏:Jane
确保为该用户设置密码,以便您可以向该领域进行身份验证。
现在,创建一个[email protected]
用户。此用户将充当现有领域用户,其电子邮件与组织设置的域之一匹配,但尚未加入该组织。此用户可能是通过自助注册创建的,或者通过与自定义身份存储集成创建的,甚至是从领域中可用的身份提供者联合创建的
用户名:alice
电子邮件:[email protected]
名字:Alice
姓氏:Chains
确保为该用户设置密码,以便您可以向该领域进行身份验证。
创建领域时,身份验证流程会自动更新,以启用特定步骤来验证和引导组织成员。更新的身份验证流程为
浏览器
首次代理登录
对浏览器
流程的主要更改是,它默认使用身份优先登录,以便在提示用户输入凭据之前先识别用户。关于首次代理登录
流程,主要更改是,在用户通过与组织关联的身份提供者进行身份验证并成功完成流程后,自动将用户添加为组织成员。
是否应进行身份优先登录的决定是根据领域中是否存在任何组织来确定的。如果尚未创建任何组织,用户将按照通常的步骤使用用户名和密码进行身份验证,或执行配置为浏览器
流程的任何其他步骤。
尝试访问http://127.0.0.1:8080/realms/orgdemo/account
,您将看到通常的登录页面。从此页面,您可以使用以下凭据像往常一样向领域进行身份验证
用户名:mjane
密码:<password>
提交登录表单后,您将对该领域进行身份验证,并自动重定向到代表用户操作的客户端应用程序。在本例中,即帐户控制台。
现在,让我们在orgdemo
领域中创建一个组织。为此,我们需要通过导航到领域设置
页面并启用组织
设置来为该领域启用组织。
启用组织后,您可以在菜单中单击组织
部分。单击创建组织
按钮以创建一个新的组织,如下所示
名称:OrgA Inc
域:orga.com
创建orga
组织后,从客户端应用程序注销,然后尝试再次登录。此时,您应该看到身份优先登录页面。
与之前的尝试不同,orgdemo
领域有一个组织,身份验证流程已更改为先识别用户,然后提示任何凭据。
在身份优先登录页面,您仍然可以以mjane
用户身份进行身份验证。但是,用户现在将分两步进行身份验证。第一步将仅要求输入用户名或电子邮件,然后在第二步中提供密码。
尝试再次登录到http://127.0.0.1:8080/realms/orgdemo/account/
并输入[email protected]
。orgdemo
领域中没有与该电子邮件关联的帐户。
如果一个不存在的用户尝试使用与组织域匹配的电子邮件域进行身份验证,身份优先登录页面将再次显示,并指示提供的用户名无效。此时,没有理由在第二步中向用户索取凭据。
有几种方法可以注册用户,以便他可以向orgdemo
领域进行身份验证,并最终加入orga
组织。
如果该领域启用了自助注册设置,用户可以单击身份优先登录页面上的注册
链接,并在orgdemo
领域中创建一个帐户。之后,管理员可以向用户发送邀请链接,或手动将其添加为orga
组织的成员。
如果该组织有一个没有设置域的身份提供者,并且这些身份提供者被标记为公共
,他们也可以单击身份优先登录页面上的身份提供者链接,在通过身份提供者进行身份验证后自动创建一个帐户并加入orga
组织。
与上述类似,如果该组织有一个设置了组织域之一的身份提供者,用户将自动重定向到身份提供者以进行身份验证,并在完成流程后自动创建一个帐户并加入orga
组织。
查看官方文档以了解详细信息。
尝试再次登录到http://127.0.0.1:8080/realms/orgdemo/account/
并输入[email protected]
。
与之前不同,现在用户将看到第二步,以提供凭据。鉴于用户存在于orgdemo
领域中,即使用户尚未加入组织,也应该可以进行身份验证。
作为管理员,您稍后可以选择邀请用户加入组织,或手动将其添加到组织中。
该功能允许您将域设置为与组织关联的身份提供者。当您希望确保使用特定电子邮件域的用户始终通过身份提供者进行身份验证时,这很有用。
让我们创建一个orga
领域,以使用orgdemo
领域中的身份提供者从中联合用户,其中身份提供者将与orga
组织关联。
创建orga
领域后,在此领域中创建一个 OpenID Connect 客户端,如下所示
客户端类型:OpenID Connect
客户端 ID:orgdemo-broker
客户端身份验证:ON
有效重定向 URI:*
(为了简单起见,使用*
,不要在生产环境中使用)
现在创建一个用户,以便我们稍后可以使用orgdemo
领域中的身份提供者来联合此用户
用户名:jdoe
电子邮件:[email protected]
名字:John
姓氏:Doe
确保为该用户设置密码,以便您可以向该领域进行身份验证。
现在让我们在orgdemo
领域中创建一个 OpenID Connect 身份提供者,如下所示
别名:orga-broker
显示名称:OrgA Inc.
发现端点:http://127.0.0.1:8080/realms/orga/.well-known/openid-configuration
客户端 ID:orgdemo-broker
客户端密钥:<在您在 orga 领域中创建 orgdemo-broker 客户端时生成的凭据>
最后,让我们关联刚刚在orgdemo
领域中创建的身份提供者,并将其链接到orga
组织。为此,请单击菜单中的组织
部分,然后选择OrgA Inc
组织。导航到身份提供者
选项卡,单击链接身份提供者
按钮,并提供以下设置
身份提供者:orga-broker
域:orga.com
电子邮件域匹配时重定向:ON
尝试再次登录到http://127.0.0.1:8080/realms/orgdemo/account/
并输入[email protected]
。用户现在将自动重定向到orga
领域以进行身份验证。
当一个尚未在领域中存在的用户尝试使用与组织域匹配的电子邮件域进行身份验证,并且该域也设置为与组织关联的身份提供者时,用户将自动重定向到身份提供者。
通过这样做,您现在可以使用以下凭据在orga
领域中进行身份验证
密码:<password>
用户完成身份验证后,将自动重定向回orgdemo
领域,创建帐户并自动加入orga
组织。
如果您以[email protected]
用户重新身份验证,情况也是如此。但是,这次用户已与身份提供者关联,并将始终通过身份提供者进行身份验证。
到目前为止,我们一直在使用orgdemo
领域中的帐户控制台客户端来验证用户。作为 OpenID Connect 客户端,成功身份验证后会颁发访问令牌。
在组织上下文中进行身份验证时,访问令牌会自动更新,其中包含有关用户所属组织的特定声明。
要将特定于组织的声明映射到令牌中,客户端需要在向服务器发送授权请求时请求organization
范围。
因此,令牌将包含如下声明
"organization": {
"orga": {}
}
organization
声明可供客户端(例如:来自 ID 令牌)和资源服务器(例如:来自访问令牌)使用,以根据用户所属的组织来授权访问受保护的资源。
organization
范围是领域中的一个内置**可选**客户端范围。因此,默认情况下,它会添加到领域中创建的任何客户端。