oicr-softeng / keycloak-apikeys

Keycloak plugin to enable API Keys for user authentication
GNU General Public License v3.0
0 stars 0 forks source link

Failed to run on Keycloak greater than v22 #13

Open leoraba opened 3 months ago

leoraba commented 3 months ago

Getting error loading keycloak-apikeys-1.0.1.jar extension on Keycloak greater than version 22. Error found on Keycloak v23 and v24 Latest working version is v22.

Steps to reproduce the issue:

  1. Copy apiKey extension onto Keycloak container: docker cp keycloak-apikeys-1.0.1.jar [CONTAINERID]:/opt/bitnami/keycloak/providers/
  2. Restart Keycloak container.
  3. Check Keycloak container logs EXPECTED: Keycloak container should run successfully with apikey extension loaded CURRENT BEHAVIOUR: Keycloak container fails to restart with the following error:
    keycloak-apikeys-keycloak-1  | 2024-05-23 15:12:36,119 WARN  [org.key.services] (build-30) KC-SERVICES0047: apikey (bio.overture.keycloak.provider.ResourceProviderFactory) is implementing the internal SPI realm-restapi-extension. This SPI is internal and may change without notice
    keycloak-apikeys-keycloak-1  | 2024-05-23 15:12:36,119 WARN  [org.key.services] (build-30) KC-SERVICES0047: metrics (org.jboss.aerogear.keycloak.metrics.MetricsEndpointFactory) is implementing the internal SPI realm-restapi-extension. This SPI is internal and may change without notice
    keycloak-apikeys-keycloak-1  | 2024-05-23 15:12:36,390 WARN  [org.key.services] (build-30) KC-SERVICES0047: metrics-listener (org.jboss.aerogear.keycloak.metrics.MetricsEventListenerFactory) is implementing the internal SPI eventsListener. This SPI is internal and may change without notice
    keycloak-apikeys-keycloak-1  | ERROR: Failed to run 'build' command.
    keycloak-apikeys-keycloak-1  | ERROR: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
    keycloak-apikeys-keycloak-1  |  [error]: Build step io.quarkus.resteasy.reactive.server.deployment.ResteasyReactiveProcessor#setupEndpoints threw an exception: java.lang.RuntimeException: java.lang.RuntimeException: Failed to process method 'bio.overture.keycloak.resource.ApiKeyResource#issueApiKey'
    keycloak-apikeys-keycloak-1  |  at org.jboss.resteasy.reactive.common.processor.EndpointIndexer.createEndpoints(EndpointIndexer.java:328)
    keycloak-apikeys-keycloak-1  |  at io.quarkus.resteasy.reactive.server.deployment.ResteasyReactiveProcessor.setupEndpoints(ResteasyReactiveProcessor.java:722)
    keycloak-apikeys-keycloak-1  |  at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    keycloak-apikeys-keycloak-1  |  at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
    keycloak-apikeys-keycloak-1  |  at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    keycloak-apikeys-keycloak-1  |  at java.base/java.lang.reflect.Method.invoke(Method.java:568)
    keycloak-apikeys-keycloak-1  |  at io.quarkus.deployment.ExtensionLoader$3.execute(ExtensionLoader.java:849)
    keycloak-apikeys-keycloak-1  |  at io.quarkus.builder.BuildContext.run(BuildContext.java:256)
    keycloak-apikeys-keycloak-1  |  at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
    keycloak-apikeys-keycloak-1  |  at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2513)
    keycloak-apikeys-keycloak-1  |  at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1538)
    keycloak-apikeys-keycloak-1  |  at java.base/java.lang.Thread.run(Thread.java:840)
    keycloak-apikeys-keycloak-1  |  at org.jboss.threads.JBossThread.run(JBossThread.java:501)
    keycloak-apikeys-keycloak-1  | Caused by: java.lang.RuntimeException: Failed to process method 'bio.overture.keycloak.resource.ApiKeyResource#issueApiKey'
    keycloak-apikeys-keycloak-1  |  at org.jboss.resteasy.reactive.common.processor.EndpointIndexer.createResourceMethod(EndpointIndexer.java:776)
    keycloak-apikeys-keycloak-1  |  at org.jboss.resteasy.reactive.common.processor.EndpointIndexer.createEndpoints(EndpointIndexer.java:417)
    keycloak-apikeys-keycloak-1  |  at org.jboss.resteasy.reactive.common.processor.EndpointIndexer.createEndpoints(EndpointIndexer.java:295)
    keycloak-apikeys-keycloak-1  |  ... 12 more
    keycloak-apikeys-keycloak-1  | Caused by: java.lang.RuntimeException: Could not create converter for java.util.ArrayList for method jakarta.ws.rs.core.Response issueApiKey(java.lang.String userId, java.util.ArrayList<java.lang.String> scopes, java.lang.String description) on class bio.overture.keycloak.resource.ApiKeyResource of type QUERY
    keycloak-apikeys-keycloak-1  |  at org.jboss.resteasy.reactive.server.processor.ServerEndpointIndexer.handleOtherParam(ServerEndpointIndexer.java:373)
    keycloak-apikeys-keycloak-1  |  at org.jboss.resteasy.reactive.server.processor.ServerEndpointIndexer.handleOtherParam(ServerEndpointIndexer.java:98)
    keycloak-apikeys-keycloak-1  |  at org.jboss.resteasy.reactive.common.processor.EndpointIndexer.extractParameterInfo(EndpointIndexer.java:1373)
    keycloak-apikeys-keycloak-1  |  at org.jboss.resteasy.reactive.common.processor.EndpointIndexer.createResourceMethod(EndpointIndexer.java:594)
    keycloak-apikeys-keycloak-1  |  ... 14 more
    keycloak-apikeys-keycloak-1  | Caused by: java.lang.RuntimeException: Failed to find converter for java.util.ArrayList
    keycloak-apikeys-keycloak-1  |  at org.jboss.resteasy.reactive.server.processor.generation.converters.GeneratedConverterIndexerExtension.extractConverterImpl(GeneratedConverterIndexerExtension.java:106)
    keycloak-apikeys-keycloak-1  |  at org.jboss.resteasy.reactive.server.processor.ServerEndpointIndexer.extractConverter(ServerEndpointIndexer.java:579)
    keycloak-apikeys-keycloak-1  |  at org.jboss.resteasy.reactive.server.processor.ServerEndpointIndexer.handleOtherParam(ServerEndpointIndexer.java:369)
    keycloak-apikeys-keycloak-1  |  ... 17 more
    keycloak-apikeys-keycloak-1  |
    keycloak-apikeys-keycloak-1  | ERROR: Build failure: Build failed due to errors
leoraba commented 1 month ago

Based on Keycloak release v23, TL;DR Keycloak has switched from quarkus-resteasy to RESTEasy Reactive. SPI's with quarkus-resteasy are not compatible on V23.

This requires a code change to migrate SPIs to use RESTEasy Reactive