【问题标题】:Jose4j validate signature alg RS256 against encryption algorithmJose4j 针对加密算法验证签名 alg RS256
【发布时间】:2018-04-05 18:18:07
【问题描述】:

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

org.jose4j.lang.InvalidAlgorithmException: RS256 是未知的, 不受支持或不可用的 alg 算法(不是 [RSA1_5, RSA-OAEP, RSA-OAEP-256, 目录, 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])

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

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

【问题讨论】:

  • 原来问题出在收到的token内容上。未加密的 JWT 包含三个部分,“p1.p2.p3”。我收到的令牌是“p1.p2.p3 p1.p2.p3”,它变成了一个加密的JWT。

标签: jose4j


【解决方案1】:

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

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

【讨论】:

  • 谢谢布赖恩!这正是这里发生的事情。接收到的未加密 JWT 应该类似于“p1.p2.p3”。我收到的令牌是“p1.p2.p3 p1.p2.p3”,它变成了一个加密的JWT。
【解决方案2】:

我遇到此错误是因为我的 JDK 中没有 JCE(Java 加密扩展)。 (我想,由于同样的问题,很多人可以用谷歌搜索这个问题)。 Here你可以找到如何在MacOS上安装它。

【讨论】:

    猜你喜欢
    • 2021-03-02
    • 1970-01-01
    • 2015-10-25
    • 2018-09-09
    • 2018-11-25
    • 1970-01-01
    • 2019-04-06
    • 2020-09-25
    • 2017-06-20
    相关资源
    最近更新 更多