You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Terraform配置Keycloak 18的Javascript OpenID Connect协议映射器

解决Keycloak 18 + Terraform Provider 3.9.1配置JavaScript OIDC协议映射器到客户端范围的问题

核心解决方案是使用keycloak_generic_protocol_mapper资源,该资源完全支持关联客户端范围及配置令牌类型,只是需要明确对应Keycloak API的参数映射,以下是具体实现步骤:

关键配置要点

  • 通过client_scope_id参数关联目标客户端范围(而非client_id,这是容易忽略的核心点)
  • 指定protocol = "openid-connect"和protocol_mapper = "oidc-javascript-protocol-mapper"(对应Keycloak内置的JavaScript OIDC映射器类型)
  • 在config块中配置管理UI里的所有对应字段:令牌声明名称、JSON类型、多值、令牌类型开关等

完整Terraform代码示例

# 先获取目标客户端范围(如profile)的ID,避免硬编码
data "keycloak_openid_client_scope" "profile" {
  realm_id = "your-realm-id"
  name     = "profile"
}

# 创建JavaScript OIDC协议映射器并关联到profile客户端范围
resource "keycloak_generic_protocol_mapper" "custom_js_claim_mapper" {
  realm_id        = "your-realm-id"
  client_scope_id = data.keycloak_openid_client_scope.profile.id
  name            = "custom-fullname-claim"
  protocol        = "openid-connect"
  protocol_mapper = "oidc-javascript-protocol-mapper"

  config = {
    # 对应UI中的"令牌声明名称"
    "claim.name"           = "full_name"
    # 对应UI中的"声明JSON类型"
    "jsonType.label"       = "String"
    # 对应UI中的"多值"
    "multivalued"          = "false"
    # 对应UI中的"添加至ID令牌"
    "id.token.claim"       = "true"
    # 对应UI中的"添加至访问令牌"
    "access.token.claim"   = "true"
    # 对应UI中的"添加至userinfo"
    "userinfo.token.claim" = "true"
    # 自定义JavaScript映射逻辑
    "script"               = <<EOF
function map(user, realm, client, session) {
  return user.firstName ? `${user.firstName} ${user.lastName}` : user.lastName;
}
EOF
  }
}

注意事项

  • protocol_mapper的值必须为oidc-javascript-protocol-mapper,这是Keycloak 18内置JavaScript映射器的官方类型标识
  • config块中的布尔参数需用字符串形式的"true"/"false"传递,符合Keycloak API的参数要求
  • 若脚本已预加载到Docker镜像中,也可通过script.file参数指定镜像内的脚本路径,替代内联脚本

内容的提问来源于stack exchange,提问作者Max

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 22:57:21