gpt4 book ai didi

java - 使用 ByteBuffer 作为 JWT 声明

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

我正在使用 JWT token ,并且我有一个声明是 ByteBuffer。 JWT 已成功生成,但是当我尝试解析 JWT token 并验证声明时,它提示 ClaimSet 没有值。

这是我的代码的外观:

        ByteBuffer encryptedText = getEncryptedTextAsByteBuffer();

Instant timestamp = timestampSupplier.get();
JWTClaimsSet claimsSet = new JWTClaimsSet();
claimsSet.setAudience("test-audience");
claimsSet.setIssuer("test-issuer");
claimsSet.setNotBeforeTime(Date.from(timestamp));
claimsSet.setExpirationTime(Date.from(Instant.ofEpochSecond(expirationTimestamp)));
claimsSet.setClaim("myObject", encryptedText );

PlainJWT jwt = new PlainJWT(claimsSet);
return jwt.serialize();

验证码如下所示:

        PlainJWT jwtToken = PlainJWT.parse(jwtToken);
ReadOnlyJWTClaimsSet claimsSet = jwtToken.getJWTClaimsSet();
Map<String, Object> claims = claimsSet.getAllClaims();
ByteBuffer encryptedText = (ByteBuffer) claims.get("myObject");

我看到的异常消息是这样的:

java.lang.ClassCastException: net.minidev.json.JSONObject cannot be cast to java.nio.ByteBuffer

我添加了一个调试器,发现 Jwt 生成有一个有效的非空 ByteBuffer,但生成的声明具有“myObject”键,但该值是一个空 json 字符串。我们可以不将声明用作 byteBuffer 吗?还是我做错了什么?

如有任何帮助,我们将不胜感激。

最佳答案

ByteBuffer 包含二进制数据,但 JSON 是文本格式。您需要将底层字节数组编码为 base64,并将其包含为 JWT 的声明

我对 ByteBuffer 还很陌生,所以我查看了 javadoc 以了解它是如何工作的。请尝试这个

// ByteBuffer to base64
byte[] data = new byte[encryptedText.remaining()]
encryptedText.get(data);
String dataB64 = DataTypeConverter.printBase64Binary(data);

//Add claim
claimsSet.setClaim("myObject", dataB64);

要验证它,请从 base64 转换为 byte[]。我认为在这种情况下不需要 ByteBuffer,但您可以从 byte[] 构建它

 String dataB64 = (String) claims.get("myObject");
byte data[] = DataTypeConverter.parseBase64Binary(dataB64)

关于java - 使用 ByteBuffer 作为 JWT 声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47893942/

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