7.5. RoleMappingsProvider 元素


RoleMappingsProvider 是一个可选元素,它允许指定 org.keycloak.adapters.saml.RoleMappingsProvider SPI 实现的 id 规格,供 SAML 适配器使用。

当红帽构建的 Keycloak 用作 IDP 时,可以在将角色添加到 SAML 断言前,使用内置角色映射程序来映射任何角色。但是,SAML 适配器可用于向第三方 IDP 发送 SAML 请求,在这种情况下,可能需要将从断言中提取的角色映射到 SP 所需的一组不同的角色。RoleMappingsProvider SPI 允许配置可用于执行必要映射的可插拔角色映射。

供应商的配置如下:

...
<RoleIdentifiers>
    ...
</RoleIdentifiers>
<RoleMappingsProvider id="properties-based-role-mapper">
    <Property name="properties.resource.location" value="/WEB-INF/role-mappings.properties"/>
</RoleMappingsProvider>
<IDP>
    ...
</IDP>
Copy to Clipboard Toggle word wrap

id 属性标识要使用哪个已安装提供程序。Property 子元素可以多次使用来指定提供程序的配置属性。

7.5.1. 基于属性的角色映射提供程序

红帽 Keycloak 的构建包括 RoleMappingsProvider 实现,它使用 属性文件 执行角色映射。此提供程序由 基于 id 属性的-role-mapper 标识,由 org.keycloak.adapters.saml.PropertiesBasedRoleMapper 类实现。

此提供程序依赖于两个配置属性,它们可以用来指定要使用的 属性 文件的位置。首先,它会检查 properties.file.location 是否被设置,使用配置的值来查找文件系统中的 properties 文件。如果配置的文件不位于,则提供程序会抛出 RuntimeException。以下片段演示了使用 properties.file.configuration 选项从文件系统中 /opt/mappers/ 目录中加载 roles.properties 文件的 provider 示例:

    <RoleMappingsProvider id="properties-based-role-mapper">
        <Property name="properties.file.location" value="/opt/mappers/roles.properties"/>
    </RoleMappingsProvider>
Copy to Clipboard Toggle word wrap

如果没有设置 properties.file.location,则供应商会检查 properties.resource.location 属性,使用配置的值来从 WAR 资源中加载 properties 文件。如果这个配置属性也不存在,则供应商默认尝试从 /WEB-INF/role-mappings.properties 中加载文件。无法从资源加载文件将导致提供程序抛出 RuntimeException。以下片段演示了使用 properties.resource.location 从应用程序的 /WEB-INF/conf/ 目录中加载 roles.properties 文件的供应商示例:

    <RoleMappingsProvider id="properties-based-role-mapper">
        <Property name="properties.resource.location" value="/WEB-INF/conf/roles.properties"/>
    </RoleMappingsProvider>
Copy to Clipboard Toggle word wrap

属性文件 可以包含角色和主体作为键,以及以逗号分隔为值的零个或多个角色的列表。调用时,实施将迭代从断言提取和检查各个角色的一组角色(如果存在映射)。如果角色映射到空角色,它将被丢弃。如果它映射到一个或多个不同角色的集合,则会在结果集中设置这些角色。如果没有为角色找到映射,则会包含在结果集中。

处理角色后,实施将检查从断言中提取的主体是否包含条目 属性文件。如果存在主体的映射,则所有作为值列出的角色都会添加到结果集中。这允许将额外的角色分配给主体。

例如,假设供应商已使用以下属性文件配置:

roleA=roleX,roleY
roleB=

kc_user=roleZ
Copy to Clipboard Toggle word wrap

如果从断言中提取了主体 kc_user,使用 roleAroleBroleC,则分配给主体的最终角色集合为 roleCroleXroleYroleZ,因为 roleA 被映射到 roleXroleYroleB 被映射到空角色 - 因此被丢弃,因此 roleC 将用作 roleC,最后添加到 kc_user _user 主体。

注: 要在角色名称中使用空格进行映射,请对空间使用 unicode 替换。例如,传入的 'role A' 显示为:

role\u0020A=roleX,roleY
Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat