如何验证标题中具有“暴击”值的JWSObject?

问题描述 投票:1回答:1

我正在尝试编写一些代码来使用JOSE标准中的java中的私钥/公钥来签署和验证有效负载。我需要使用PS256加密算法。

我正在使用connect2id的库Nimbus JOSE + JWT。我能够通过从文件系统加载的私钥来签署有效负载,我也可以验证它。但是作为我的要求的一部分,我的标题需要有一个“暴击”值(作为RFC-7515的一部分解释)。

我的问题如下:一旦我在标题中有“暴击”值,我的令牌验证就会失败(即使“我的jws”标题中的值存在于标准所要求的“暴击”数组中)。如果我取出“暴击”,那么签名就会被正确验证。

// create RSA key used for signing. 
RSAKey rsaJWK = new RSAKey.Builder(pub)
  .privateKey(priv)
  .keyUse(KeyUse.SIGNATURE)
  .algorithm(JWSAlgorithm.PS256)
  .keyID("KeyID")
  .build();

// Create RSA-signer with the private key
JWSSigner signer = new RSASSASigner(rsaJWK);

// setting critical values to be used in jws header
Set crit = new HashSet();
crit.add("myHeader");

// setting additional parameters for the jws header
Map myParams = new HashMap();
myParams.put("myHeader", false);

// build the jws header with all the values needed
JWSHeader jwsHeader = new JWSHeader.Builder(JWSAlgorithm.PS256)
  .type(JOSEObjectType.JOSE)
  .contentType("application/json")
  .keyID("KeyID")
  .criticalParams(crit)
  .customParams(myParams)
  .build();


// build the jws object with the header we created above and a static payload for now
JWSObject jwsObject = new JWSObject(jwsHeader, new Payload("{\"message\":\"In RSA we trust!!!\"}"));

// sign the payload
jwsObject.sign(signer);

// print out the token
String s = jwsObject.serialize();
System.out.println("Your token:" + s);



// To parse the JWS and verify it, e.g. on client-side
JWSObject jwsValObj = JWSObject.parse(s);

JWSVerifier verifier = new RSASSAVerifier(pub);

// verify the signature of the parsed token
boolean sigval = jwsValObj.verify(verifier);
System.out.println("Signature Validation passed: " + String.valueOf(sigval)); 

我期待签名得到正确验证,因为“暴击”中的值存在于给定的令牌中。只要我用.criticalParams(crit)删除该行,那么验证就会顺利进行。

有人可以帮我解决这个问题吗?我误解了某些东西或遗漏了一些明显的细节吗?

java cryptography jwt jose json-web-signature
1个回答
1
投票

RFC 7515之后,必须通过应用程序理解关键标题,因此您需要指示库将它们推迟到应用程序进行处理

查看RSASSAVerifier源代码,尝试更改

JWSVerifier verifier = new RSASSAVerifier(pub);

JWSVerifier verifier = new RSASSAVerifier(pub,crit );
© www.soinside.com 2019 - 2024. All rights reserved.