JWT 令牌加密

JWT Token Encryption

我想加密我的 JWT 令牌。我已经浏览了 quarkus 文档和 JWT 的各种属性。但是我无法弄清楚出了什么问题。带有简单签名位的基本内容工作正常,

Jwt.claims(jsonObject).sign();

这里我设置了2个属性,

mp.jwt.verify.publickey.location=publicKey.pem
smallrye.jwt.sign.key.location=privateKey.pem

对于加密位,根据文档我设置了 2 个附加属性,

mp.jwt.decrypt.key.location=privateKey.pem
smallrye.jwt.encrypt.key.location=publicKey.pem

正在使用的代码是,

Jwt.innerSignAndEncrypt(jsonObject);

当我打开验证跟踪时,我在日志中收到以下异常,

Caused by: org.jose4j.lang.InvalidKeyException: The key must not be null.
        at org.jose4j.jwx.KeyValidationSupport.notNull(KeyValidationSupport.java:72)
        at org.jose4j.jwx.KeyValidationSupport.castKey(KeyValidationSupport.java:56)
        at org.jose4j.jwe.RsaKeyManagementAlgorithm.validateDecryptionKey(RsaKeyManagementAlgorithm.java:57)
        at org.jose4j.jwe.JsonWebEncryption.createDecryptingPrimitive(JsonWebEncryption.java:225)
        at org.jose4j.jwe.JsonWebEncryption.decrypt(JsonWebEncryption.java:240)
        at org.jose4j.jwe.JsonWebEncryption.getPlaintextBytes(JsonWebEncryption.java:85)
        at org.jose4j.jwe.JsonWebEncryption.getPlaintextString(JsonWebEncryption.java:78)
        at org.jose4j.jwe.JsonWebEncryption.getPayload(JsonWebEncryption.java:93)
        at org.jose4j.jwt.consumer.JwtConsumer.process(JwtConsumer.java:366)

不确定需要设置什么键。

注意:为了测试,我使用相同的 RSA 密钥对进行签名和加密。

非常感谢任何帮助。

TIA

我也在 Quarkus 聊天中发布了这个。在为他们创建复制器应用程序时,我使用了最新的 Quarkus 2.1.3 版。在那里我遇到了一个不同的异常,

Caused by: org.jose4j.lang.InvalidAlgorithmException: 'RSA-OAEP-256' is not a permitted algorithm.
at org.jose4j.jwa.AlgorithmConstraints.checkConstraint(AlgorithmConstraints.java:80)

进一步调查后,这似乎是 smallrye 中的一个问题,尽管记录的默认算法是“RSA-OAEP”,但它试图默认为“RSA-OAEP-256”。 解决方案是将 属性(smallrye.jwt.decrypt.algorithm) 明确设置为“RSA-OAEP-256”,同时添加 fix.