在单元测试期间,我注意到一些预期的行为。
我使用您的代码生成了一个 RsaJsonWebKey 密钥对。创建后,我将算法设置为 RS512。我基于此创建了一个公共 JWK。此时,密钥对和 JWK 具有相同的密钥 ID、算法和签名。接下来在 UT 中,我将 JWK 的算法更改为 RS256。我预计这会失败,但它仍然匹配并验证。当然,密钥 ID,最重要的是,签名仍然匹配。算法真的有必要吗?查看 Jose4J 源代码,它似乎从未设置为与 JWK 匹配。
在 SimpleJwkFilter.filter() 方法中
匹配 &= isMatch(alg, jwk.getAlgorithm()); <-- alg 从未设置,因此通过 isMatch