jose4j算法在签名的JWT和JWK之间不匹配

时间:2018-05-25 15:03:01

标签: jose4j

在单元测试期间,我注意到了一些关于。

的预期行为

我使用你的代码生成一个RsaJsonWebKey密钥对。创建后,我将算法设置为RS512。我创建了一个公共JWK。此时,密钥对和JWK具有相同的密钥ID,算法和签名。接下来在UT中,我将JWK的算法改为RS256。我预计这会失败,但它仍然匹配和验证。 当然,关键身份,最重要的是,签名仍然匹配。算法真的有必要吗?查看Jose4J源代码,似乎它从未设置为与JWK匹配。

方法SimpleJwkFilter.filter()

中的

match& = isMatch(alg,jwk.getAlgorithm()); < - alg永远不会被设置,因此传递isMatch

1 个答案:

答案 0 :(得分:0)

我假设您正在使用typescript(由VerificationJwkSelectorJwksVerificationKeyResolver使用)。它使用HttpsJwksVerificationKeyResolver但仅告诉它使用' alg'当JWK首次尝试过滤导致多个密钥时,作为消歧技术的选择标准。请参阅:https://bitbucket.org/b_c/jose4j/src/b577cb539b09cb691e848244dea1769c3f7921b9/src/main/java/org/jose4j/jwk/VerificationJwkSelector.java#lines-42

我遇到了一些' alg'在JWKS内容中设置不正确,并在初始选择中考虑它排除了实际的验证密钥。 SimpleJwkFilter行为旨在容纳不正当的“alg'值。

2015年的一次单元测试中,JWKS存在有问题的alg值: https://bitbucket.org/b_c/jose4j/src/b577cb539b09cb691e848244dea1769c3f7921b9/src/test/java/org/jose4j/jwk/VerificationJwkSelectorTest.java#lines-349