gpt4 book ai didi

java - JWT 解密,但抛出 mac check failed 错误

转载 作者:行者123 更新时间:2023-12-02 13:19:50 25 4
gpt4 key购买 nike

我有一个 jhipster spring boot 应用程序,它接受第三方生成的 token ,该 token 已使用我们的公钥加密。我有一个 JWTFilter,它使用我们的私钥解密 token 并创建一个存储在安全上下文中的身份验证对象。一旦执行到达 Controller ,我打算从安全上下文中提取用户名和密码,以便我可以将 API 调用回第三方应用程序。

这在我们的集成环境中在某种程度上发挥了作用,其中第三方具有指向我们应用程序正在运行的实例的链接。为了在本地进行测试,我点击集成环境中的链接并复制 token 。然后,我从 Postman 向我在本地运行的应用程序实例发出请求,并在 header 中添加 token ,这与我们的 js 客户端相同。

我使用“com.nimbusds:nimbus-jose-jwt:4.23”进行解密,但收到“MAC 检查失败”错误。我可以在调试器中将 macCheckPassed 的值更改为 true,解密将完成,从而允许我查看声明并将它们加载到安全上下文中。然而,其他一些过滤器正在捕获我的黑客攻击,并且请求因授权错误而被拒绝。

public static byte[] decryptAuthenticated(final SecretKey secretKey,
final byte[] iv,
final byte[] cipherText,
final byte[] aad,
final byte[] authTag,
final Provider ceProvider,
final Provider macProvider)
throws JOSEException {


// Extract MAC + AES/CBC keys from input secret key
CompositeKey compositeKey = new CompositeKey(secretKey);

// AAD length to 8 byte array
byte[] al = AAD.computeLength(aad);

// Check MAC
int hmacInputLength = aad.length + iv.length + cipherText.length + al.length;
byte[] hmacInput = ByteBuffer.allocate(hmacInputLength).
put(aad).
put(iv).
put(cipherText).
put(al).
array();
byte[] hmac = HMAC.compute(compositeKey.getMACKey(), hmacInput, macProvider);

byte[] expectedAuthTag = Arrays.copyOf(hmac, compositeKey.getTruncatedMACByteLength());

boolean macCheckPassed = true;

if (! ConstantTimeUtils.areEqual(expectedAuthTag, authTag)) {
// Thwart timing attacks by delaying exception until after decryption
macCheckPassed = false;
}

byte[] plainText = decrypt(compositeKey.getAESKey(), iv, cipherText, ceProvider);

if (! macCheckPassed) {

throw new JOSEException("MAC check failed");
}

return plainText;
}

这个 MAC 检查是什么?我认为这与 token 的起源有关。与使用源系统的 MAC ID 加密的 token 类似,当它与我当前的主机不同步时,会引发错误。

如果解密通过,还有哪些过滤器会拒绝请求?我是否应该设置其他一些标志,以便框架能够满足该请求?

最佳答案

JWE 规范要求 authenticated encryption ,确保明文不仅被加密,而且还能防止篡改。确保HMAC is applied内容加密后。

“Mac 检查失败”错误可能意味着两件事 - 生成原始 JWE/JWT 的库错误地应用了 HMAC,或者 JWE/JWT 在传输过程中被修改。

关于java - JWT 解密,但抛出 mac check failed 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43617966/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com