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

Keycloak 21.1.2执行JavaScript适配器时找不到ScriptEngine问题求助

问题描述

使用quay.io/keycloak/keycloak:21.1.2 Docker镜像搭配JavaScript适配器时,认证流程执行适配器出现如下错误:

keycloak-1 keycloak 2023-09-26 11:19:33,012 WARN
[org.keycloak.services] (executor-thread-5) KC-SERVICES0013: Failed
authentication: java.lang.IllegalStateException: Could not find
ScriptEngine for script: Script{id='null', realmId='master',
name='role-based-authenticator', type='text/javascript',
code='AuthenticationFlowError =
Java.type("org.keycloak.authentication.AuthenticationFlowError");

根据Keycloak 21.1.0版本发布说明,Nashorn JavaScript引擎默认已内置在Keycloak服务器中,但仍出现该问题,求解决方法。

更新 2023.10.05

用以下代码尝试复现问题,运行完全正常。推测问题出在复杂自定义构建中,但无法分享该构建细节。

docker-compose.yaml

version: "3.9"

services:
  keycloak:
    build:
      context: .
      args:
      - KC_FEATURES=scripts
    environment:
      KEYCLOAK_ADMIN: admin
      KEYCLOAK_ADMIN_PASSWORD: admin
      KC_LOG_LEVEL: info
      KC_HOSTNAME_STRICT_HTTPS: "false"
      KC_FEATURES: scripts
    command:
      - start-dev
    ports:
      - 8080:8080

Dockerfile

ARG KEYCLOAK_VERSION=21.1.2

FROM redhat/ubi8-minimal:8.6-941 as bundle

# Stage to avoid zip in final image and git repository
RUN microdnf install -y findutils zip
COPY keycloak-extensions /tmp/keycloak-extensions

WORKDIR /tmp/keycloak-extensions
RUN find . -maxdepth 1 -mindepth 1 -type d -execdir /bin/sh -c "cd {}; zip -r \"/tmp/keycloak-extensions/{}.jar\" ." \


# Build Step
FROM quay.io/keycloak/keycloak:$KEYCLOAK_VERSION as builder

ARG KC_FEATURES

# Copy Keycloak extensions and metrics provider
COPY --from=bundle /tmp/keycloak-extensions/*.jar /opt/keycloak/providers/

# Build optimized keycloak image
RUN /opt/keycloak/bin/kc.sh build

FROM quay.io/keycloak/keycloak:$KEYCLOAK_VERSION

ARG KC_FEATURES

COPY --from=builder /opt/keycloak/ /opt/keycloak/

EXPOSE 8080

ENTRYPOINT ["/opt/keycloak/bin/kc.sh"]
CMD [ "start"]

Keycloak适配器代码

keycloak-extensions/log-autenticator/log-authenticator.js

function authenticate(context) {
    LOG.info("Hello World!");
    context.success();
}

keycloak-extensions/log-autenticator/META-INF/keycloak-scripts.json

{
  "authenticators": [
    {
      "name": "log-authenticator",
      "fileName": "log-authenticator.js",
      "description": "Logs a simple Hello message"
    }
  ]
}
排查建议

既然基础复现环境正常,问题出在自定义复杂构建中,可从以下方向排查:

  • 确认scripts特性是否全局生效:检查构建全流程中KC_FEATURES参数是否在所有阶段正确传递,避免最终镜像中丢失该配置。启动时可查看日志,确认是否有scripts特性加载的相关记录。
  • 检查构建依赖完整性:复杂构建的优化或打包环节可能误删Nashorn相关依赖。对比基础镜像与自定义镜像的依赖差异,确认jdk.scripting.nashorn模块是否存在。
  • 验证扩展打包规范:检查自定义脚本扩展的打包是否符合Keycloak要求,比如keycloak-scripts.json的路径是否正确、脚本文件是否被完整包含在jar包内,避免路径错误导致脚本无法被识别。
  • 核查构建命令参数:确认kc.sh build命令未添加禁用脚本引擎的参数,也没有其他自定义配置覆盖默认的脚本引擎设置。
  • 获取完整错误堆栈:收集更完整的错误日志信息,确认是引擎未找到,还是脚本执行时的其他依赖缺失,以此缩小问题范围。

内容的提问来源于stack exchange,提问作者Sirish Kumar Bethala

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 02:32:55