Quarkus和Keycloak / OIDC-NullPointerException

时间:2019-12-13 21:00:22

标签: java jwt openid-connect keycloak quarkus

我正在使用Quarkus 1.0.1框架开发一套微服务。我想使用Keycloak 8.0.1作为身份提供者来保护它们。我已经在Docker容器中启动并运行了Keycloak,并为我的微服务配置了领域和相应的客户端。现在到了要保护它们的地步,我遇到了问题。

我的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并将其添加为Authorization标头。这仍然没有用,并以相同的异常失败。我对Keycloak没做任何时髦的事情。在这一点上,我的配置非常普通,所以我无法想象问题出在我的代码本身。我的配置中缺少什么吗?还是这是Keycloak中的错误?

1 个答案:

答案 0 :(得分:2)

那很简单:NullPointerException始终是一个错误。我们已经修复了一些与Keycloak 8有关的问题,但似乎与它无关。

请在我们的Bugtracker(https://github.com/quarkusio/quarkus/issues)上打开一个问题,最好使用一个示例应用来再现该问题。

我们计划在星期二早上发布一个版本,因此,如果您可以尽早创建此版本,将会有所帮助。