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

标签 java keycloak

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

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

最佳答案

可以通过查看此处的 keycloak 源来理解脚本映射器的魔力:Source

脚本可以像这样使用 exports 变量返回一些东西

exports = "Claim Value"

不同的类型:

这是一个示例脚本:

// 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;

希望对您有所帮助!

关于java - 如何在 Keycloak 中创建脚本映射器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52518298/

相关文章:

java - 找出五个数字中最小的数字

java - 检查android手机存储中是否存在已知文档Uri

java - 仅当特殊字符不在单词内部时才从字符串中删除特殊字符

java - 使用 spring boot 自定义 keycloak 错误页面

javascript - OAuth 2.0 OpenID Connect 环回和 Keycloak

Java Web 应用程序适用于 netbeans,但不适用于 "stand-alone"

java - Struts 标签覆盖实际的上下文路径

api - Keycloak API 总是返回 401

angular - Keycloak Angular 2

docker - 使用 keycloak 作为 gitlab-ci 服务