已部署的 Keycloak 脚本映射器不会显示在 GUI 中



我使用的是Keycloak 10.0.2的docker镜像。我希望Keycloak提供access_tokens,供Hasura使用。Hasura 需要这样的自定义声明:

{
"sub": "1234567890",
"name": "John Doe",
"admin": true,
"iat": 1516239022,
"https://hasura.io/jwt/claims": {
"x-hasura-allowed-roles": ["editor","user", "mod"],
"x-hasura-default-role": "user",
"x-hasura-user-id": "1234567890",
"x-hasura-org-id": "123",
"x-hasura-custom": "custom-value"
}
}

按照文档,并使用我在网上找到的脚本(请参阅此要点(,我使用此脚本创建了一个脚本映射器jar(从要点逐字复制(,hasura-mapper.js

var roles = [];
for each (var role in user.getRoleMappings()) roles.push(role.getName());
token.setOtherClaims("https://hasura.io/jwt/claims", {
"x-hasura-user-id": user.getId(),
"x-hasura-allowed-roles": Java.to(roles, "java.lang.String[]"),
"x-hasura-default-role": "user",
});

以及元信息/中的以下keycloak-scripts.json

{
"mappers": [
{
"name": "Hasura",
"fileName": "hasura-mapper.js",
"description": "Create Hasura Namespaces and roles"
}
]
}

Keycloak 调试日志指示它找到了 jar,并成功部署了它。 但下一步是什么?我在 GUI 中的任何位置都找不到已部署的映射器,那么如何激活它?我尝试创建协议映射器,但选项"脚本映射器"不可用。"范围 ->评估"会生成标准访问令牌。

如何激活已部署的协议映射器?

当然,在您提出问题后,您仍然会继续搜索,我终于在这个JIRA问题中找到了答案。脚本功能自(我认为(版本 8 以来一直是预览功能。

因此,在启动Keycloak时,您需要提供:

-Dkeycloak.profile.feature.scripts=enabled 

之后,您的脚本映射器将显示在"创建映射器"屏幕上的"映射器类型"下拉列表中,并且一切正常。

要为基于 Quarkus 的发行版启用scripts功能,您必须使用--features启动标志。

适用于红帽包装的容器

docker run quay.io/keycloak/keycloak:latest [start|start-dev] --features=scripts

对于比特纳米包装的容器

docker run bitnami/keycloak:latest -e KEYCLOAK_EXTRA_ARGS="--features=scripts"

最新更新