Я работаю над набором микросервисов с использованием фреймворка Quarkus 1.0.1. Я хотел бы защитить их, используя Keycloak 8.0.1 в качестве поставщика удостоверений. У меня есть Keycloak, работающий в контейнере Docker, и я настроил область и соответствующий клиент для своих микросервисов. Теперь я подошел к тому моменту, когда я хочу защитить их, и у меня возникла проблема.
Моя служба REST не имеет аннотации @RolesAllowed
или каких-либо требований авторизации, настроенных для нее. Это должно означать, что я могу подключиться к службе, даже если я не аутентифицирован. Однако, когда я пытаюсь это сделать, я вижу это исключение:
20:55:29 ERROR [io.quarkus.vertx.http.runtime.QuarkusErrorHandler] HTTP Request to /api/v1/mymethod failed, error id: 666dd651-6a8b-4004-9c11-3c5bee54503f-5: java.lang.NullPointerException
at io.quarkus.keycloak.pep.KeycloakPolicyEnforcerAuthorizer.apply(KeycloakPolicyEnforcerAuthorizer.java:44)
at io.quarkus.keycloak.pep.KeycloakPolicyEnforcerAuthorizer.apply(KeycloakPolicyEnforcerAuthorizer.java:28)
at io.quarkus.vertx.http.runtime.security.HttpAuthorizer$1$1.run(HttpAuthorizer.java:65)
at io.quarkus.runtime.CleanableExecutor$CleaningRunnable.run(CleanableExecutor.java:224)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:2011)
at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1535)
at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1426)
at org.jboss.threads.DelegatingRunnable.run(DelegatingRunnable.java:29)
at org.jboss.threads.ThreadLocalResettingRunnable.run(ThreadLocalResettingRunnable.java:29)
at java.base/java.lang.Thread.run(Thread.java:830)
at org.jboss.threads.JBossThread.run(JBossThread.java:479)
Мой application.properties
файл выглядит так:
quarkus.oidc.auth-server-url=http://localhost:8880/auth/realms/myrealm
quarkus.oidc.client-id=myreal-default
quarkus.oidc.credentials.secret=<SECRET UUID>
quarkus.oidc.authentication.scopes=oidc
quarkus.oidc.application-type=service
... и я тестирую с помощью curl вот так:
curl -vki -H http://localhost:8080/api/v1/mymethod
Я подумал, что это может быть связано с тем, что я не прошел аутентификацию, поэтому я получил Keycloak JWT и добавил его в качестве заголовка авторизации. Это по-прежнему не сработало, с тем же исключением. Я не делаю ничего фанкового с Keycloak. Моя конфигурация на данный момент довольно проста, поэтому я не могу представить, что проблема кроется в самом моем коде. Мне что-то не хватает в моей конфигурации? Или это ошибка в Keycloak?