我希望加密我的JWT令牌。我已经浏览了夸克文档和JWT的各种属性。然而,我无法弄清楚到底出了什么问题。简单签名的基本功能很好,
Jwt.claims(jsonObject).sign();我在这里设置了两个属性,
mp.jwt.verify.publickey.location=publicKey.pem
smallrye.jwt.sign.key.location=privateKey.pem对于加密位,根据文档,我要设置另外两个属性,
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密钥对进行签名和加密。
任何帮助都是非常感谢的。
提亚
发布于 2021-08-25 19:02:05
我也在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)对此进行进一步研究,似乎是小黑麦的一个问题,尽管有文档记录的默认算法是"RSA-OAEP",但它试图默认为"RSA-OAEP-256“。解决方案是将属性(smallrye.jwt.decrypt.algorithm)显式设置为"RSA-OAEP-256",同时添加一个修复。
https://stackoverflow.com/questions/68841241
复制相似问题