我有一个回调url,它在头和请求体中接收hmac256。
但是,当我试图用hmac256头验证请求主体时。两个值都不同。
public static final String SECRET = "secret_key";
public static final String HMAC_SHA256_ALGORITHM = "HmacSHA256";
@PostMapping("/callbackUrl")
public void receiveNotification(@RequestHeader("hmac-sha256") String hmac, @RequestBody Notification notification) {
SecretKeySpec sKey = new SecretKeySpec(SECRET.getBytes(StandardCharsets.UTF_8), HMAC_SHA256_ALGORITHM);
Mac mac = Mac.getInstance(HMAC_SHA256_ALGORITHM);
mac.init(sKey);
byte[] data = new ObjectMapper().writeValueAsBytes(notification);
byte[] rawHmac = mac.doFinal(data);
String result = new String(Base64.encodeBase64(rawHmac));
log.info("HMAC request calculated {}", result);
log.info("HMAC received {}", hmac);
}
我在信息日志中得到不同的值,而我应该得到相同的值:
HMAC request calculated w5ynJTVV1H8GNgzje91BKEIYn8n9GtRU7iNcnEr/AwE=
HMAC received P5z/Ipu71qQ4ROqExL87xfhkCz5e1WpP4ypFxtikyaE=
哪部分代码不正确?
编辑
要检查发送方如何计算hmac,请检查以下内容:
https://docs.cronofy.com/developers/push-notifications/authentication/
1条答案
按热度按时间vawmfj5a1#
我把问题贴出来了。这个问题在代码上稍作改动就解决了。我没有直接将值写为字节,而是先将其改为字符串,然后从中读取字节。
更改为:
对此:
感谢马丁·博德维斯指出了正确的方向。