I recently migrated from Keycloak 12 to Keycloak 21.0.1 After migration the script based authentication is getting failed because I am getting the ScriptEngine as null for the mimetype text/javascript
.
ScriptEngine engineByMimeType = new ScriptEngineManager().getEngineByMimeType(script.getMimeType()); // getting it as null mime type is 'text/javascript'
Keycloak Code: https://github.com/keycloak/keycloak/blob/21.0.2/services/src/main/java/org/keycloak/scripting/DefaultScriptingProvider.java#L145
This was working fine in the keycloak version 12.
Error Log:
\[org.keycloak.services\] (executor-thread-0) KC-SERVICES0013: Failed authentication: java.lang.IllegalStateException: Could not find ScriptEngine for script: Script{...}
at org.keycloak.scripting.DefaultScriptingProvider.getPreparedScriptEngine(DefaultScriptingProvider.java:114)
at org.keycloak.scripting.DefaultScriptingProvider.prepareEvaluatableScript(DefaultScriptingProvider.java:74)
at org.keycloak.scripting.DefaultScriptingProvider.prepareInvocableScript(DefaultScriptingProvider.java:55)
at org.keycloak.authentication.authenticators.browser.ScriptBasedAuthenticator.getInvocableScriptAdapter(ScriptBasedAuthenticator.java:164)
at org.keycloak.authentication.authenticators.browser.ScriptBasedAuthenticator.tryInvoke(ScriptBasedAuthenticator.java:120)
at org.keycloak.authentication.authenticators.browser.ScriptBasedAuthenticator.authenticate(ScriptBasedAuthenticator.java:103)
...
Thanks, @Elliott Frisch, My java release version was 11, Adding Nashorn Core fixed the issue.
<dependencies>
<dependency>
<groupId>org.openjdk.nashorn</groupId>
<artifactId>nashorn-core</artifactId>
<version>15.4</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies-quarkus</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/keycloak-server-extras/providers</outputDirectory>
<includeArtifactIds>nashorn-core,asm,asm-util,asm-commons</includeArtifactIds>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
And moved dependencies to /opt/keycloak/providers
COPY providers/target/keycloak-server-extras/providers/* /opt/keycloak/providers/
Reference: https://www.keycloak.org/docs/latest/server_development/index.html#deploy-the-script-jar