【问题标题】:Quarkus and Keycloak/OIDC - NullPointerExceptionQuarkus 和 Keycloak/OIDC - NullPointerException
【发布时间】:2019-12-14 05:49:32
【问题描述】:

我正在使用 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 中的错误?

【问题讨论】:

  • 你试过在你的属性文件中设置 quarkus.keycloak.policy-enforcer.enable=true 吗?我从本指南中得到它:quarkus.io/guides/security-keycloak-authorization 这解决了我的异常。
  • 我做到了。不过,这似乎并没有什么不同。

标签: java jwt openid-connect keycloak quarkus


【解决方案1】:

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

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

我们计划在周二早上发布,所以如果您能尽早创建它,那将会有所帮助。

【讨论】:

  • 我遇到了几乎相同的错误,但使用的是 KC 6。您能告诉我您是仅使用最新的 KC 还是使用旧版本测试您的错误修复?如果是的话,你会去多低(版本号)?
  • 它与 Keycloak 7 一起使用,我们将测试升级到 8。我很确定我们从未使用 Keycloak 6 进行过测试。
  • 感谢您提供的信息。实际上,我通过拥有与 op 相同的堆栈跟踪来误导自己,并且没有进一步思考。今天我看了一下 quarkus keycloak 指南,发现我没有设置 quarkus.keycloak.policy-enforcer.enable=true 现在它可以工作了。耶:D
猜你喜欢
  • 2020-08-14
  • 2021-12-08
  • 2023-02-02
  • 2021-10-02
  • 2021-11-15
  • 2022-11-27
  • 2021-09-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多