Keycloak 使用scriptMapper计算KeyClope客户端属性
我正在使用KeyClope作为开放ID连接提供程序, 我想通过OpenId将我的KeyClope实例连接到服务。 但该服务要求用户信息提供数字标识符(KeyClope不提供)。 我想我可以使用脚本映射器来完成这个任务,并获取密钥斗篷内部id(uuid)并从中生成一个数字id 脚本映射器应该接受javascript,但没有文档或操场来帮助我调试结果 这段代码似乎有效,但我无法在我的用户信息中获得结果Keycloak 使用scriptMapper计算KeyClope客户端属性,keycloak,jboss-tools,Keycloak,Jboss Tools,我正在使用KeyClope作为开放ID连接提供程序, 我想通过OpenId将我的KeyClope实例连接到服务。 但该服务要求用户信息提供数字标识符(KeyClope不提供)。 我想我可以使用脚本映射器来完成这个任务,并获取密钥斗篷内部id(uuid)并从中生成一个数字id 脚本映射器应该接受javascript,但没有文档或操场来帮助我调试结果 这段代码似乎有效,但我无法在我的用户信息中获得结果 var id = user.Id.replace(/-/g, '').substring(0,10
var id = user.Id.replace(/-/g, '').substring(0,10);
var fake_id = parseInt(id, 16);
fake_id
此代码已被接受,但我无法调试它。
当我尝试返回假id时代码>我得到错误:
返回语句无效返回假\u id代码>
谢谢你的帮助 您的代码几乎不错。我已经在Keyclope 6.0.1上检查过了。
但是,有几件事需要检查和考虑:
JS脚本不应该显式地包含任何return
语句。它的最后一个语句作为返回值。在Keylcoak 6.0.1上,添加显式返回将导致验证错误
确保已启用“添加到用户信息”,如下图所示:
注意:为了进行测试,您还可以启用“添加到访问令牌”。在这种情况下,您可以使用资源所有者密码凭据授权请求访问令牌,并检查映射器是否按预期工作
您的JS代码中有几处需要更改:
- 当基于10个字符解析int时,得到的数字太大,无法解析为int。当我将其转换为6个字符时,我得到了一个int
- 对结果数字使用Math.floor()以确保它将是一个整数。这很奇怪,但我发现即使是简单的
parseInt(“10”)
也会导致Double
而不是整数。我相信这就是Nashorn(Key斗篷使用的Javascript引擎)的特点
var id=user.id.replace(/-/g',).substring(0,6);
var fake_id=parseInt(id,16);
数学地板(假id)代码>更新:实际数学地板(假id);不适用于最新的KeyClope版本。我根本没有得到任何输出,keydape返回这个错误:无法映射令牌声明的类型。我会在Keyclope bug tracker上填写bug报告。