1

JWT 使用 RS256 签名,我使用 jose4j 验证 JWT 签名。在我无权访问的用户环境之一中,它会生成此意外异常:

org.jose4j.lang.InvalidAlgorithmException:RS256 是未知、不受支持或不可用的 alg 算法(不是 [RSA1_5、RSA-OAEP、RSA-OAEP-256、dir、A128KW、A192KW、A256KW、ECDH-ES、ECDH-ES +A128KW、ECDH-ES+A192KW、ECDH-ES+A256KW、PBES2-HS256+A128KW、PBES2-HS384+A192KW、PBES2-HS512+A256KW、A128GCMKW、A192GCMKW、A256GCMKW])

看起来签名算法被错误地验证为密钥加密算法。请注意,我的代码仅进行签名验证,没有任何解密/加密逻辑。这只发生在一个用户环境中,我无法在本地访问或重新创建它。

有没有人见过这样的问题?或者可以给我一个调试它的提示?

4

2 回答 2

2

查看JwtConsumer它正在处理的 JWT 字符串,并尝试根据格式确定它是 JWS 还是 JWE。JWS 具有由两个句点 ('.') 字符分隔的三个段,例如<header>.<payload>.<signature>,而 JWE 具有由四个句点 ('.') 字符分隔的五个段,例如<header>.<encrypted-key>.<IV>.<ciphertext>.<authentication-tag>.

您似乎以某种方式得到了一个格式错误的 JWT,它有一个 JWS 标头,但五个编码段由四个句点字符分隔。将JwtConsumer首先看到带有四个点的结构并尝试将其作为 JWE 处理。然后,当它看到非 JWE alg 标头值时,它会失败。我不知道 JWT 是如何出现这样的格式错误的,但这几乎肯定是错误消息的含义。

于 2017-10-25T17:01:04.493 回答
0

我有这个错误是因为我的 JDK 中没有 JCE(Java Cryptography Extension)。(我想,由于同样的问题,很多人可以用谷歌搜索这个问题)。 在这里您可以找到如何在 MacOS 上安装它。

于 2019-11-20T21:29:59.910 回答