Quarkus и Keycloak / OIDC - NullPointerException

Я работаю над набором микросервисов с использованием фреймворка 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?


person Shadowman    schedule 13.12.2019    source источник
comment
Вы пробовали установить quarkus.keycloak.policy-enforcer.enable = true в своем файле свойств? Я взял его из этого руководства: quarkus.io/guides/security-keycloak-authorization это решило мое исключение.   -  person JWo    schedule 17.12.2019
comment
Я сделал. Хотя, похоже, это не имело значения.   -  person Shadowman    schedule 17.12.2019


Ответы (1)


Это просто: исключение NullPointerException всегда является ошибкой. Мы исправили некоторые проблемы, связанные с Keycloak 8, но, похоже, они не связаны.

Пожалуйста, откройте проблему в нашем багтрекере (https://github.com/quarkusio/quarkus/issues), желательно с примером приложения, воспроизводящего проблему.

У нас есть релиз, запланированный на утро вторника, так что если вы сможете создать его как можно раньше, это поможет.

person Guillaume Smet    schedule 13.12.2019
comment
У меня возникла почти такая же ошибка, но с KC 6. Можете ли вы сказать мне, тестируете ли вы свои исправления ошибок только с новейшим KC или с более старыми версиями? Если да, то какой у вас низкий (номер версии)? - person JWo; 16.12.2019
comment
Он работал с Keycloak 7, и мы обновили наши тесты до 8. Я почти уверен, что мы никогда не тестировали что-то с Keycloak 6. - person Guillaume Smet; 17.12.2019
comment
Спасибо Вам за информацию. на самом деле я ввожу себя в заблуждение, имея ту же трассировку стека, что и op, и больше не думал. Сегодня я взглянул на руководство quarkus keycloak и понял, что не установил quarkus.keycloak.policy-enforcer.enable = true. Теперь он работает. Ура: D - person JWo; 17.12.2019