在单元测试期间,我注意到了一些关于。
的预期行为我使用你的代码生成一个RsaJsonWebKey密钥对。创建后,我将算法设置为RS512。我创建了一个公共JWK。此时,密钥对和JWK具有相同的密钥ID,算法和签名。接下来在UT中,我将JWK的算法改为RS256。我预计这会失败,但它仍然匹配和验证。 当然,关键身份,最重要的是,签名仍然匹配。算法真的有必要吗?查看Jose4J源代码,似乎它从未设置为与JWK匹配。
方法SimpleJwkFilter.filter()中的
match& = isMatch(alg,jwk.getAlgorithm()); < - alg永远不会被设置,因此传递isMatch
答案 0 :(得分:0)
我假设您正在使用typescript
(由VerificationJwkSelector
和JwksVerificationKeyResolver
使用)。它使用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