java - 使用 jose4j 验证具有分离负载的 JWS 失败

标签 java jwt jose4j

我在验证具有分离负载的 JWS 时遇到问题。我基本上复制了 example provided 中的所有步骤在 jose4j 文档中,但由于某种原因,验证仍然返回 false,而它应该成功。

这是我正在使用的代码,使用最新版本的 jose4j。

// signature is the complete JWS in the form: "JOSE Header".."JWS Signature"
// payload is the unencoded JSON string that makes up the request body
public boolean verifySignature(String signature, String payload) {

        JsonWebSignature jws = new JsonWebSignature();
        jws.setKnownCriticalHeaders(critHeaders); //critical headers from documentation
        //Algorithm as provided in documentation
        jws.setAlgorithmConstraints(new AlgorithmConstraints(AlgorithmConstraints.ConstraintType.PERMIT, 
                                                            AlgorithmIdentifiers.ECDSA_USING_P256_CURVE_AND_SHA256));
        jws.setPayload(payload);
        try {
            jws.setCompactSerialization(signature);
            String keyId = jws.getKeyIdHeaderValue();
            String keyType = jws.getKeyType();
            String keyAlg = jws.getAlgorithmHeaderValue();
            //Retrieve key from cached jwks
            JsonWebKey usedKey = jwks.findJsonWebKey(keyId, keyType, "sig", keyAlg);
            jws.setKey(usedKey.getKey());
            return jws.verifySignature();
        } catch  (JoseException e) {
            //log
            return false;
        }       
    }

最佳答案

尝试将 jws.setPayload(payload); 向下移动到 jws.setCompactSerialization(...); 行之后。
认为 jws.setCompactSerialization(...); 正在将有效负载覆盖为空字符串,这会破坏签名验证。

关于java - 使用 jose4j 验证具有分离负载的 JWS 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70380691/

相关文章:

java - LinkedIn OAuth2/oauth/v2/accessToken 响应未返回 "token_type"

java - 无法在不同的机器上运行独立的 Java Swing 应用程序

javascript - jwt无法解析,Okta

java - 信任 SSL 证书 : how does Commons HTTP client trust more than standard Java?

java - java密码学中 'AGCM256-KW'的算法字符串是什么,用于Cipher.getInstance(String algo)?

jwt - 使用 JWKs 端点处理 JWT token

java - 循环内更新时仅显示一次提示

java - Hive jdbc.query(sql, rowmapper) 抛出 UnCatogarized 异常

jwt - NBF 在 JWT 上下文中代表什么?

api - Spring Security 中接收 token 的基本身份验证