JWTClaimsSet.Builder() 和 JSONObject - 可验证演示 JWT 中的对象

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

我必须创建一个 JWTClaim,其中包含一个带有 JSON 的属性:

exampleClaimJson = {
     "nonce":"13234-3234345-34454",
}

在 Java 中我是这样构建的:

JSONObject exampleClaimJson = new JSONObject();
didJson.put("nonce","13234-3234345-34454");

JWTClaimsSet claimsSet = new JWTClaimsSet.Builder()
    .subject(did)
    .claim("exampleJson", exampleClaimJson)
    .build()

但是在 JWT 内部,“exampleJson”声明是这样表示的:

{
     ...
     "exampleJson": {
          "map": {
                  "nonce":"13234-3234345-34454"
          }
     }
}

另一方面,如果我使用

.claim("exampleJson", exampleClaimJson.toString())

然后就变成:

{
     ...
     "exampleJson": "{\"nonce\":\"13234-3234345-34454\"}"
}

对我来说,这一切看起来都不好,特别是因为声明的结构将被验证,并且必须只是一个 JSON,而不是带有地图声明,也不是一个简单的字符串。

有谁知道这在Java中是否是正确的方法?我正在看这个 Building JSON Web Token using JSONObject and JSONArray(不过从 2015 年开始..) - minidev 和 java json 对象之间有什么区别?为 Java 项目包含不同的 JSON 库是正常做法吗?

jwt openid nimbus-jose-jwt
1个回答
0
投票

您的代码看起来正确 - 也许存在某种库不兼容?要使用对象声明,请参阅nimbus 测试。这是一些工作代码:

var verifiablePresentationJson = new JSONObject()
verifiablePresentationJson.put("nonce", "13234-3234345-34454")

val did = "did:example:user123"
val claimsSet = new JWTClaimsSet.Builder()
    .subject(did)
    .claim("verifiablePresentationJson", verifiablePresentationJson)
    .build()
System.out.println(claimsSet.toString())

请注意,您应该使用以下类而不是其他实现:

net.minidev.json.JSONObject

通过添加此依赖项来实现此目的,就像 nimbus 项目一样:

implementation("net.minidev:json-smart:2.5.0")
© www.soinside.com 2019 - 2024. All rights reserved.