12.4. OIDC 令牌和 SAML 断言映射
接收 ID 令牌、访问令牌或 SAML 断言的应用可能需要不同的角色和用户元数据。
您可以使用红帽构建的 Keycloak 进行以下操作:
- 硬编码角色、声明和自定义属性。
- 将用户元数据拉取到令牌或断言中。
- 重命名角色。
您可以在管理控制台的 Mappers 选项卡中执行这些操作。
Mappers 标签页
新客户端没有内置映射程序,但它们可以从客户端范围内继承一些映射程序。如需了解更多详细信息,请参阅 客户端范围部分。
协议映射器将项(如电子邮件地址)映射到身份和访问令牌中的特定声明。映射程序的功能应该自我解释其名称。您可以通过单击 Add Builtin 来添加预配置的映射程序。
每个映射程序都有一组通用设置。根据映射器类型,提供了其他设置。单击映射程序旁边的 Edit,以访问配置屏幕来调整这些设置。
mapper 配置
可以通过将鼠标悬停在工具提示来查看每个选项的详情。
您可以使用大多数 OIDC mapper 来控制声明被放置的位置。您可以通过调整 Add to ID 令牌和 Add to access token 开关,选择包含或排除来自 id 和 access 令牌的声明。
您可以添加映射程序类型,如下所示:
流程
- 前往 Mappers 选项卡。
单击 Configure a new mapper。
添加映射程序
- 从列表中选择一个映射类型。
12.4.1. 优先级顺序
映射器实施具有 优先级顺序。优先级顺序 不是映射器的配置属性。它是映射器的 concrete 实现的属性。
映射程序按照映射器列表的顺序进行排序。令牌或断言中的更改按以下顺序应用,首先应用最低。因此,依赖于其他实现的实现会根据所需顺序进行处理。
例如,要计算令牌中包含的角色:
- 根据这些角色解决使用者。
- 处理使用令牌中的角色和使用者的 JavaScript 脚本。
12.4.2. OIDC 用户会话备注映射程序
用户会话详情使用映射器定义,当您在客户端上使用或启用功能时会自动包含。点 Add builtin 使其包含会话详情。
模拟的用户会话提供以下详情:
- IMPERSONATOR_ID :模拟用户的 ID。
- IMPERSONATOR_USERNAME :模拟用户的用户名。
服务帐户会话提供以下详情:
- clientId :服务帐户的客户端 ID。
- client_id :服务帐户的客户端 ID。
- clientAddress :服务帐户验证设备的远程主机 IP。
- clientHost :服务帐户验证设备的远程主机名。
12.4.3. 脚本映射程序
通过运行用户定义的 JavaScript 代码,使用 Script Mapper 将声明映射到令牌。有关向服务器部署脚本的更多详细信息,请参阅 JavaScript Providers。
部署脚本时,应该可以从可用映射器列表中选择部署的脚本。