首页 > 解决方案 > 基于 SAML 属性在 Keycloak 中自动添加和删除角色

问题描述

我在 Keycloak 中设置了 SAML IdP,它工作正常。我们从 SAML 中获得一个名为“Groups”的属性,它是一个组 ID 列表。所以我设置了一些“高级属性到角色”类型的映射器。我将 GroupA 映射到 RoleA,将 GroupB 映射到 RoleB,等等。起初这很好用。如果用户的“Groups”属性包含“GroupA”,则该用户被正确分配了 RoleA。

问题是当用户从 GroupA 重新分配到 GroupB 时。现在,当该用户登录时,他被正确分配了 RoleB,但他保留了之前的 RoleA。如果用户只是失去 GroupA,则该用户保留 RoleA。

我希望用户拥有这些角色,并且只有那些基于他当前的 Groups 属性映射的角色。而如果一个用户失去了一个组属性值,那么他就应该失去相应的角色。

我该如何解决这种情况?这可以使用 SAML 属性映射器来完成吗?这样做的正确方法是什么?

标签: keycloaksamlsaml-2.0

解决方案


要覆盖用户的角色,请将该映射器的同步模式覆盖设置为强制(提示:确保角色存在)

具有同步模式覆盖的映射器 = 强制

或者 - 如果您想覆盖所有映射的属性和角色,在 IDP 的设置中,您可以将同步模式设置为强制:

将 IDP 同步模式设置为强制

并在您的映射器中设置同步模式覆盖以继承

具有同步模式覆盖的映射器 = 继承使用同步模式的 IDP 设置

然后在用户每次登录期间,IDP 映射器映射的属性和角色都会被覆盖。

提示:在每次登录时同步用户当然比导入用户一次更昂贵。因此,如果您只想覆盖单个属性或角色,您应该只强制更新该映射器。


推荐阅读