Keycloak 使用scriptMapper计算KeyClope客户端属性

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

我正在使用KeyClope作为开放ID连接提供程序, 我想通过OpenId将我的KeyClope实例连接到服务。 但该服务要求用户信息提供数字标识符(KeyClope不提供)。 我想我可以使用脚本映射器来完成这个任务,并获取密钥斗篷内部id(uuid)并从中生成一个数字id

脚本映射器应该接受javascript,但没有文档或操场来帮助我调试结果

这段代码似乎有效,但我无法在我的用户信息中获得结果

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报告。