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])
看起来签名算法针对密钥加密算法进行了错误验证。请注意,我的代码仅进行签名验证,并且没有任何解密/加密逻辑。这只发生在一个用户环境中,我无法在本地访问或重新创建它。
有没有人见过这样的问题?或者可以给我一个调试它的提示?
答案 0 :(得分:1)
JwtConsumer
查看它正在处理的JWT字符串,并尝试根据格式确定它是JWS还是JWE。 JWS有三个段,由两个句点(&#39;。&#39;)字符分隔,如<header>.<payload>.<signature>
,而JWE有五个段,由四个句点(&#39;。&#39;)字符分隔,如{{ 1}}。
看起来你似乎得到了一个格式错误的JWT,它有一个JWS标题,但有五个编码的段由四个句点字符分隔。 <header>.<encrypted-key>.<IV>.<ciphertext>.<authentication-tag>
将首先看到具有四个点的结构,并尝试将其作为JWE处理。然后当它看到非JWE alg头值时失败。我不知道JWT可能会如何变形,但这几乎肯定是错误信息的意思。
答案 1 :(得分:0)
我有此错误,因为我的JDK中没有JCE(Java密码学扩展)。 (我想,由于同样的问题,很多人都可以用谷歌搜索这个问题)。 Here,您可以找到如何在MacOS上安装它。