【问题标题】:Quarkus security smallrye jwtQuarkus 安全 smallrye jwt
【发布时间】:2021-11-19 21:30:15
【问题描述】:

我正在 quarkus 中创建一个 Web 服务,并且我想生成令牌以验证我的端点中的用户(用户位于 JDBC 中)。我不会使用其他服务,例如 keycloak。只是 quarkus 和我的前面 (vuejs)。

我正在尝试仅在 quarkus 中生成令牌。我该怎么做? 我正在做这样的事情......

`@ApplicationScoped
public class JwtGen {
     public void gen() {
            String token =
               Jwt.upn("arthur") 
                 .groups(new HashSet<>(Arrays.asList("User"))) 
                 .sign();
            System.out.println(token);
        }
}

`

我创建了一个 publicKey.pem 并在 application.propperties 中,使这个 linemp.jwt.verify.publickey.location=publicKey.pem

编辑:我的 application.properties

    quarkus.http.cors=true
    quarkus.http.cors.origins=*
    
    
    quarkus.smallrye-jwt.enabled=true
    mp.jwt.verify.publickey=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlivFI8qB4D0y2jy0CfEqFyy46R0o7S8TKpsx5xbHKoU1VWg6QkQm+ntyIv1p4kE1sPEQO73+HY8+Bzs75XwRTYL1BmR1w8J5hmjVWjc6R2BTBGAYRPFRhor3kpM6ni2SPmNNhurEAHw7TaqszP5eUF/F9+KEBWkwVta+PZ37bwqSE4sCb1soZFrVz/UT/LF4tYpuVYt3YbqToZ3pZOZ9AX2o1GCG3xwOjkc4x0W7ezbQZdC9iftPxVHR8irOijJRRjcPDtA6vPKpzLl6CyYnsIYPd99ltwxTHjr3npfv/3Lw50bAkbT4HeLFxTx4flEoZLKO/g0bAoV2uqBhkA9xnQIDAQAB
    mp.jwt.decrypt.key.location=privateKey.pem
    mp.jwt.verify.issuer=https://example.com/issuer

这是日志错误

io.smallrye.jwt.build.JwtSignatureException: SRJWT05009: 
at io.smallrye.jwt.build.impl.JwtSignatureImpl.sign(JwtSignatureImpl.java:77)
at br.com.infralog.JwtGen.gen(JwtGen.java:17)
at br.com.infralog.JwtGen_Subclass.gen$$superforward1(JwtGen_Subclass.zig:89)
at br.com.infralog.JwtGen_Subclass$$function$$6.apply(JwtGen_Subclass$$function$$6.zig:24)
at io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:54)
at io.quarkus.arc.runtime.devconsole.InvocationInterceptor.proceed(InvocationInterceptor.java:62)
at io.quarkus.arc.runtime.devconsole.InvocationInterceptor.monitor(InvocationInterceptor.java:49)
at io.quarkus.arc.runtime.devconsole.InvocationInterceptor_Bean.intercept(InvocationInterceptor_Bean.zig:521)
at io.quarkus.arc.impl.InterceptorInvocation.invoke(InterceptorInvocation.java:41)
at io.quarkus.arc.impl.AroundInvokeInvocationContext.perform(AroundInvokeInvocationContext.java:41)
at io.quarkus.arc.impl.InvocationContexts.performAroundInvoke(InvocationContexts.java:32)
at br.com.infralog.JwtGen_Subclass.gen(JwtGen_Subclass.zig:145)
at br.com.infralog.JwtGen_ClientProxy.gen(JwtGen_ClientProxy.zig:126)
at br.com.infralog.webservice.StateWsResource.list(StateWsResource.java:58)
at br.com.infralog.webservice.StateWsResource_Subclass.list$$superforward1(StateWsResource_Subclass.zig:324)
at br.com.infralog.webservice.StateWsResource_Subclass$$function$$27.apply(StateWsResource_Subclass$$function$$27.zig:53)
at io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:54)
at io.quarkus.arc.runtime.devconsole.InvocationInterceptor.proceed(InvocationInterceptor.java:62)
at io.quarkus.arc.runtime.devconsole.InvocationInterceptor.monitor(InvocationInterceptor.java:49)
at io.quarkus.arc.runtime.devconsole.InvocationInterceptor_Bean.intercept(InvocationInterceptor_Bean.zig:521)
at io.quarkus.arc.impl.InterceptorInvocation.invoke(InterceptorInvocation.java:41)
at io.quarkus.arc.impl.AroundInvokeInvocationContext.perform(AroundInvokeInvocationContext.java:41)
at io.quarkus.arc.impl.InvocationContexts.performAroundInvoke(InvocationContexts.java:32)
at br.com.infralog.webservice.StateWsResource_Subclass.list(StateWsResource_Subclass.zig:556)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:170)
at org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:130)
at org.jboss.resteasy.core.ResourceMethodInvoker.internalInvokeOnTarget(ResourceMethodInvoker.java:660)
at org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTargetAfterFilter(ResourceMethodInvoker.java:524)
at org.jboss.resteasy.core.ResourceMethodInvoker.lambda$invokeOnTarget$2(ResourceMethodInvoker.java:474)
at org.jboss.resteasy.core.interception.jaxrs.PreMatchContainerRequestContext.filter(PreMatchContainerRequestContext.java:364)
at org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTarget(ResourceMethodInvoker.java:476)
at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:434)
at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:408)
at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:69)
at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:492)
at org.jboss.resteasy.core.SynchronousDispatcher.lambda$invoke$4(SynchronousDispatcher.java:261)
at org.jboss.resteasy.core.SynchronousDispatcher.lambda$preprocess$0(SynchronousDispatcher.java:161)
at org.jboss.resteasy.core.interception.jaxrs.PreMatchContainerRequestContext.filter(PreMatchContainerRequestContext.java:364)
at org.jboss.resteasy.core.SynchronousDispatcher.preprocess(SynchronousDispatcher.java:164)
at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:247)
at io.quarkus.resteasy.runtime.standalone.RequestDispatcher.service(RequestDispatcher.java:73)
at io.quarkus.resteasy.runtime.standalone.VertxRequestHandler.dispatch(VertxRequestHandler.java:138)
at io.quarkus.resteasy.runtime.standalone.VertxRequestHandler$1.run(VertxRequestHandler.java:93)
at io.quarkus.vertx.core.runtime.VertxCoreRecorder$14.runWith(VertxCoreRecorder.java:481)
at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2442)
at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1476)
at org.jboss.threads.DelegatingRunnable.run(DelegatingRunnable.java:29)
at org.jboss.threads.ThreadLocalResettingRunnable.run(ThreadLocalResettingRunnable.java:29)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.base/java.lang.Thread.run(Thread.java:834)

原因:java.lang.IllegalArgumentException:SRJWT05021:请设置“smallrye.jwt.sign.key.location”属性 在 io.smallrye.jwt.build.impl.JwtSignatureImpl.getKeyLocationFromConfig(JwtSignatureImpl.java:187) 在 io.smallrye.jwt.build.impl.JwtSignatureImpl.sign(JwtSignatureImpl.java:72) ... 53 更多

请我在这几乎是一个弱者......请帮助!

【问题讨论】:

标签: security jwt quarkus


【解决方案1】:

我认为答案在异常消息中:

请设置“smallrye.jwt.sign.key.location”属性

因此,如果您尚未在 application.properties 中设置私钥,这很可能会对您有所帮助。没有它,就不可能生成token。

这也可以在the documentation 中找到:

请注意,要使此代码正常工作,我们需要与我们在 TokenSecuredResource 应用程序中拥有的公钥对应的 RSA 私钥的内容。

那里还描述了如何配置和生成公钥和私钥。

【讨论】:

  • 此属性 'smallrye.jwt.sign.key.location' 在 application.properties 中始终标记为“未知属性”。代码没有与它一起运行。我已经尝试过 mp.jwt.decrypt.key.location=privateKey.pem,但成功为 0
  • 您使用哪个 Quarkus 版本?您可以发布(相关部分)您的 application.properties 吗?
  • 谢谢。我更新了
  • 好的,你是对的,我忽略了,smallrye.jwt.sign.key.location 已被弃用,应该用你使用的那个 (mp.jwt.decrypt.key.location) 替换。仍然不清楚您使用的是哪个 Quarkus 版本。这将决定哪些属性是可用的。你能发布你的 maven 或 gradle 文件吗?
猜你喜欢
  • 1970-01-01
  • 2022-01-20
  • 2021-03-11
  • 1970-01-01
  • 2019-08-28
  • 2021-01-10
  • 2021-06-07
  • 2021-04-29
  • 2020-07-19
相关资源
最近更新 更多