当前位置: 首页 > 知识库问答 >
问题:

Quarkus和keycloak/oidc-NullPointerException

庾远航
2023-03-14

我正在使用Quarkus 1.0.1框架开发一套微服务。我希望使用KeyCloak8.0.1作为我的身份提供程序来保护这些信息。我已经在一个Docker容器中启动并运行了Keycloak,并为我的微服务配置了一个领域和相应的客户机。现在我到了我想保护他们的地步,我遇到了一个问题。

我的REST服务没有为它配置的@rolesalloved注释或任何授权要求。这应该意味着,即使我没有经过身份验证,我也能够访问该服务。但是,当我尝试这样做时,我看到了这个异常:

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内的bug?

共有1个答案

屠瑞
2023-03-14

这很简单:NullPointerException总是一个bug。我们已经修复了一些与KeyCloak8相关的问题,但这一个似乎并不相关。

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

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

 类似资料:
  • 我目前正在使用多个Quarkus服务和Keycloak RBAC开发一个PoC。工作起来就像一个魅力,很容易引导和开始实现功能。 但我遇到了一个我无法解决的问题。想象一下: null 使JWT的持续时间超过当前的30分钟,但这只是推迟了问题并打开了一些安全门 将用户的输入存储在本地存储器中,以便在令牌刷新后进行恢复(我们也会这样做,以避免浪费用户的工作) 在JS中“静默”刷新令牌,而不让用户知道。

  • 是否有人成功地在部署在Kubernetes集群中的Quarkus应用程序中设置了与Keycloack的OIDC连接?您能说明(和其他相关参数)是如何工作的吗?(以下是我试图遵循的文档) 当POD启动时,这些味精会出现在它的日志中: 2021-07-26 14:44:22,523 INFO[main][oidcrecorder.java:264]-每2秒连接IDP最多180次 2021-07-26

  • 我有以下设置: Keycoap在docker中运行,公共接口映射到127.0.0.1:8180,内部Keycoap-n:8080 Quarkus在docker中运行,公共接口映射到127.0.0.1:8080 两者都在同一docker网络中运行,并可以通信。 外部AutzClient(不在docker中),使用令牌与quarkus通信 如果客户端和quarkus在Docker之外,并通过同一接口与

  • 我是Quarkus的新手,我正在Quarkus 1.13.3中尝试OIDC,我添加了oidc-dependency并用@rolesalloved注释了我的REST-Service-methods。当我用过期的JWT-Token调用服务时,我得到401,当我用错误的用户组调用时,我得到403,到目前为止这还不错。但是,Quarkus在这样做的时候并没有在日志中写入任何内容。我需要日志消息声明有人用无

  • 我正在尝试让一个基本的节点oidc提供者应用程序作为我的密钥斗篷服务器的oidc提供者。 Keycoat正确链接到我的应用程序的登录页面。输入用户名和密码后,我会被正确地传送回keycoat。 但是,密钥斗篷显示“使用身份提供者进行身份验证时出现意外错误”。 编辑:我调整了keycoat日志级别,现在看到以下错误: 无法进行身份提供程序oauth回调:org.keycloak.broker.pro

  • 我在试用Quarkus与keycloak的安全集成 下面是我的restendpoint 我的应用程序属性 任何帮助都将不胜感激