如何在Keycloak中创建脚本映射器?

2024-01-21

我需要在 Keycloak 中创建一个 Script Mapper 类型的协议映射器。该脚本应该获取用户属性,检查其大小,并将其放在令牌上。我没有找到有关如何创建脚本的文档或示例。从我收集到的零碎信息来看,我想脚本需要看起来像这样:

var value = user.getAttribute("myAttribute");
if (value.length > LIMIT) {
    value = value.substring(0,LIMIT);
}
token.setOtherClaims("myAttribute",value);
  • 这是正确的吗?我编造了 user.getAttribute("myAttribute")。是否有文档来源可以让我找到如何获取 Keycloak 用户属性?
  • 脚本需要返回什么吗? 任何帮助都会受到欢迎。

脚本映射器的魔力可以通过查看这里的 keycloak 源代码来理解:Source https://github.com/keycloak/keycloak/blob/2a4cee60440be6767e0f1e9155cebfa381cfb776/services/src/main/java/org/keycloak/protocol/oidc/mappers/ScriptBasedOIDCProtocolMapper.java#L143

该脚本可以通过使用这样的导出变量返回一些内容

exports = "Claim Value"

不同类型:

  • user: Source https://github.com/keycloak/keycloak/blob/master/server-spi/src/main/java/org/keycloak/models/UserModel.java JavaDoc https://www.keycloak.org/docs-api/6.0/javadocs/org/keycloak/models/UserModel.html
  • realm: Source https://github.com/keycloak/keycloak/blob/master/server-spi/src/main/java/org/keycloak/models/RealmModel.java JavaDoc https://www.keycloak.org/docs-api/6.0/javadocs/org/keycloak/models/RealmModel.html
  • token: Source https://github.com/keycloak/keycloak/blob/master/core/src/main/java/org/keycloak/representations/IDToken.java JavaDoc https://www.keycloak.org/docs-api/6.0/javadocs/org/keycloak/representations/IDToken.html
  • 用户会话:Source https://github.com/keycloak/keycloak/blob/master/server-spi/src/main/java/org/keycloak/models/UserSessionModel.java JavaDoc https://www.keycloak.org/docs-api/6.0/javadocs/org/keycloak/models/UserSessionModel.html
  • keycloak会话:Source https://github.com/keycloak/keycloak/blob/master/server-spi/src/main/java/org/keycloak/models/KeycloakSession.java JavaDoc https://www.keycloak.org/docs-api/6.0/javadocs/org/keycloak/models/KeycloakSession.html

这是一个示例脚本:

// you can set standard fields in token
token.setAcr("test value");

// you can set claims in the token
token.getOtherClaims().put("claimName", "claim value");

// multi-valued claim (thanks to @ErwinRooijakkers)
token.getOtherClaims().put('foo', Java.to(['bars'], "java.lang.String[]"))

// work with variables and return multivalued token value
var ArrayList = Java.type("java.util.ArrayList");
var roles = new ArrayList();
var client = keycloakSession.getContext().getClient();
var forEach = Array.prototype.forEach;
forEach.call(user.getClientRoleMappings(client).toArray(), function(roleModel) {
  roles.add(roleModel.getName());
});

exports = roles;

希望能帮助到你!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Keycloak中创建脚本映射器? 的相关文章

  • Grails 3.x bootRun 失败

    我正在尝试在 grails 3 1 11 中运行一个项目 但出现错误 失败 构建失败并出现异常 什么地方出了错 任务 bootRun 执行失败 进程 命令 C Program Files Java jdk1 8 0 111 bin java
  • Java new Date() 打印

    刚刚学习 Java 我知道这可能听起来很愚蠢 但我不得不问 System out print new Date 我知道参数中的任何内容都会转换为字符串 最终值是 new Date 返回对 Date 对象的引用 那么它是如何打印这个的呢 Mo
  • Spring Batch 多线程 - 如何使每个线程读取唯一的记录?

    这个问题在很多论坛上都被问过很多次了 但我没有看到适合我的答案 我正在尝试在我的 Spring Batch 实现中实现多线程步骤 有一个包含 100k 条记录的临时表 想要在 10 个线程中处理它 每个线程的提交间隔为 300 因此在任何时
  • 如何默认将 Maven 插件附加到阶段?

    我有一个 Maven 插件应该在编译阶段运行 所以在项目中consumes我的插件 我必须做这样的事情
  • Java中反射是如何实现的?

    Java 7 语言规范很早就指出 本规范没有详细描述反射 我只是想知道 反射在Java中是如何实现的 我不是问它是如何使用的 我知道可能没有我正在寻找的具体答案 但任何信息将不胜感激 我在 Stackoverflow 上发现了这个 关于 C
  • 在画布上绘图

    我正在编写一个 Android 应用程序 它可以在视图的 onDraw 事件上直接绘制到画布上 我正在绘制一些涉及单独绘制每个像素的东西 为此我使用类似的东西 for int x 0 x lt xMax x for int y 0 y lt
  • 如何找到给定字符串的最长重复子串

    我是java新手 我被分配寻找字符串的最长子字符串 我在网上研究 似乎解决这个问题的好方法是实现后缀树 请告诉我如何做到这一点或者您是否有任何其他解决方案 请记住 这应该是在 Java 知识水平较低的情况下完成的 提前致谢 附 测试仪字符串
  • JAXb、Hibernate 和 beans

    目前我正在开发一个使用 Spring Web 服务 hibernate 和 JAXb 的项目 1 我已经使用IDE hibernate代码生成 生成了hibernate bean 2 另外 我已经使用maven编译器生成了jaxb bean
  • 多个 Maven 配置文件激活多个 Spring 配置文件

    我想在 Maven 中构建一个环境 在其中我想根据哪些 Maven 配置文件处于活动状态来累积激活多个 spring 配置文件 目前我的 pom xml 的相关部分如下所示
  • Spark 1.3.1 上的 Apache Phoenix(4.3.1 和 4.4.0-HBase-0.98)ClassNotFoundException

    我正在尝试通过 Spark 连接到 Phoenix 并且在通过 JDBC 驱动程序打开连接时不断收到以下异常 为简洁起见 下面是完整的堆栈跟踪 Caused by java lang ClassNotFoundException org a
  • 列出jshell中所有活动的方法

    是否有任何命令可以打印当前 jshell 会话中所有新创建的方法 类似的东西 list但仅适用于方法 您正在寻找命令 methods all 它会打印所有方法 包括启动 JShell 时添加的方法 以及失败 被覆盖或删除的方法 对于您声明的
  • 磁模拟

    假设我在 n m 像素的 2D 表面上有 p 个节点 我希望这些节点相互吸引 使得它们相距越远吸引力就越强 但是 如果两个节点之间的距离 比如 d A B 小于某个阈值 比如 k 那么它们就会开始排斥 谁能让我开始编写一些关于如何随时间更新
  • Mockito when().thenReturn 不必要地调用该方法

    我正在研究继承的代码 我编写了一个应该捕获 NullPointerException 的测试 因为它试图从 null 对象调用方法 Test expected NullPointerException class public void c
  • Spring @RequestMapping 带有可选参数

    我的控制器在请求映射中存在可选参数的问题 请查看下面的控制器 GetMapping produces MediaType APPLICATION JSON VALUE public ResponseEntity
  • Java TestNG 与跨多个测试的数据驱动测试

    我正在电子商务平台中测试一系列商店 每个商店都有一系列属性 我正在考虑对其进行自动化测试 是否有可能有一个数据提供者在整个测试套件中提供数据 而不仅仅是 TestNG 中的测试 我尝试不使用 testNG xml 文件作为机制 因为这些属性
  • 总是使用 Final?

    我读过 将某些东西做成最终的 然后在循环中使用它会带来更好的性能 但这对一切都有好处吗 我有很多地方没有循环 但我将 Final 添加到局部变量中 它会使速度变慢还是仍然很好 还有一些地方我有一个全局变量final 例如android Pa
  • 无法捆绑适用于 Mac 的 Java 应用程序 1.8

    我正在尝试将我的 Java 应用程序导出到 Mac 该应用程序基于编译器合规级别 1 7 我尝试了不同的方法来捆绑应用程序 1 日食 我可以用来在 Eclipse 上导出的最新 JVM 版本是 1 6 2 马文 看来Maven上也存在同样的
  • 如何从泛型类调用静态方法?

    我有一个包含静态创建方法的类 public class TestClass public static
  • 在 Maven 依赖项中指定 jar 和 test-jar 类型

    我有一个名为 commons 的项目 其中包含运行时和测试的常见内容 在主项目中 我添加了公共资源的依赖项
  • Spring Boot @ConfigurationProperties 不从环境中检索属性

    我正在使用 Spring Boot 1 2 1 并尝试创建一个 ConfigurationProperties带有验证的bean 如下所示 package com sampleapp import java net URL import j

随机推荐

  • 适用于超大时间序列的最佳索引数据结构

    我想询问 SO 们关于用于索引时间序列 又名按列数据 又名平面线性 的最佳数据结构的意见 根据采样 离散化特征 存在两种基本类型的时间序列 常规离散化 每个样本都以共同频率采集 不规则离散化 任意时间点采样 需要的查询 时间范围 t0 t1
  • 泛型方法和方法重载

    方法重载允许我们定义许多具有相同名称但具有不同参数集的方法 因此具有相同的名称但不同的签名 这两个方法是否重载 class A public static void MyMethod
  • 找不到`SQLitePCLRaw.batteries_v2`

    我添加了一个sqlite net pclNuGet 包到 Xamarin iOS 项目 该应用程序以以下异常结束 找不到程序集引用的 SQLitePCLRaw batteries v2 SQLite net 版本 1 1 0 0 文化 中性
  • 从 .html 文件读取其内容的简单 Flask 应用程序。外部样式表被阻止?

    我制作了一个非常简单的 Flask 应用程序 它从 html 文件读取其内容 除了样式之外 该应用程序可以正常工作 奇怪的是 我的内联 CSS 代码可以工作 但外部样式表却不能工作 我已经检查过语法 它应该可以工作 Flask 是否会以某种
  • 如何编写可变参数模板递归函数?

    我正在尝试编写一个可变参数模板constexpr计算给定模板参数总和的函数 这是我的代码 template
  • 快速安全的加密算法 C#

    我正在寻找一种使用 C 实现的快速且安全的加密算法 我需要能够恢复初始消息 你有什么建议 感谢您的帮助 如果需要非对称加密 请使用 2048 位 RSA 如果您可以使用对称加密 请使用 256 位 AES MSDN 参考 系统 安全 密码学
  • 自动调整用户表单大小

    目标是一个可以自动调整大小以显示所有可见控件但没有额外死区的用户窗体 顶部始终可见 3 个组合框 但在其下方是 26 个标签及其关联的 5 个选项按钮 复选框 这 26 行将全部开始隐藏 并且仅在特定条件下可见 三个组合框中的第一个将说明
  • 如何使用 DataTemplates 通过 ViewModel-First 方法缓存动态切换的视图

    我在用GalaSoft MvvmLight框架 我的一些看法MainWindow xaml我通过用户选择在运行时动态地在它们之间切换 这些视图使用以下技术与其相应的视图模型绑定 主窗口 xaml
  • 如何将存储库镜像同步到新的上游存储库

    我有一个仓库镜像服务器 myrepo 最初是为了镜像而创建的 与远程同步 repoA 也就是说 我使用类似以下的内容来创建它 cd myrepo repo init u git repoA server manifest git mirro
  • RedHat Enterprise Linux 5.3 及以上版本不正确支持 sem_timedwait?

    我们在使用 pthreadsem timedwait 的 RedHat Enterprise Linux 系统上看到了奇怪的行为 仅 5 3 及以上版本才会出现此情况 当我们使用 sem init 在后台线程上创建信号量时 不会返回错误 当
  • Xcode 错误:缺少必需的模块“Firebase”

    问题 我有一个动态框架 它使用Firebase由 cocoapods 添加 我还有应用程序 它使用这个动态框架 但是当我尝试构建项目时出现错误Missing required module Firebase 我尝试了以下方法 删除派生数据
  • 持续监控前 X 个进程的 CPU 使用率

    我希望能够每 5 秒将最高 CPU 消耗者输出到日志文件 这样我就可以在测试期间看到谁使用了最多的 cpu 我发现这个答案很常见 cpu Get Counter ComputerName localhost Process Processo
  • Mojolicious 中用于处理不同路径的全局变量和线程

    在我的 Mojolicious perl 代码中 我处理从远程客户端创建和监视的作业 我将作业保存在哈希数组中 这是一个全局变量 然后它在 PUT job create 和 GET job status 的处理程序中使用 当使用 PUT j
  • 映射抽象类和子类时NHibernate DuplicateMappingException

    我有一个抽象类及其子类 我想使用 NHibernate 将其映射到我的数据库 我在用着Fluent https github com FluentNHibernate fluent nhibernate wiki Fluent config
  • 连接故事板中 Cell Prototype 的插座

    我是故事板的新手 所以我遇到了一些困难 我已经创建了一个 TableViewController 我想自定义单元原型 在单元格原型中 我添加了几个标签 我想用我自己的继承自 UITableViewCell AreaListCell 的类进行
  • 正弦 180 的值为 1.22465e-16

    我想在ios4中实现一个正弦和余弦计算器 if operation isEqual sin operand operand M PI 180 0 operand sin operand 该代码为我提供了 0 到 90 之间的值的正确答案 当
  • socket.io - 为一个套接字获取多个字段?

    当用户断开连接时 我有以下代码 我想发出带有房间名称和用户名的信号 client get nickname function err name client get room function err2 room io sockets in
  • 如果启用静态压缩,IIS 中的 gzip js 不会被压缩

    我已经使用 Squishit 来缩小和捆绑 JS 并压缩捆绑文件我在 IIS 7 5 中启用了选项 启用静态内容压缩 问题是 Js 没有被压缩 我只是得到缩小的 js 但如果我启用动态内容压缩 那么 Js 就会被压缩 现在动态压缩的问题是它
  • scanf从一个输入读取多种数据类型

    所以我试图读入以下形式的方程mx b y 我该如何使用scanf读取多种数据类型 我尝试过使用类似的东西 scanf d c c d c d num1 variable sign num2 equal sign num3 在这种格式下 它读
  • 如何在Keycloak中创建脚本映射器?

    我需要在 Keycloak 中创建一个 Script Mapper 类型的协议映射器 该脚本应该获取用户属性 检查其大小 并将其放在令牌上 我没有找到有关如何创建脚本的文档或示例 从我收集到的零碎信息来看 我想脚本需要看起来像这样 var