jose4j JWT 的声明集的属性类型不是字符串对象

jose4j JWT's claims set's attribute type other than string object

我一直在使用 jose4j 版本 0.6.0 来生成 Json Web 令牌 (JWT)。一切都很好,直到令牌生成、令牌验证。 JWT 的声明有效载荷可以包含许多元素,例如版本、tokenId、发行者、权限等。我正在传递 TokenPermissions 对象,它是 oneM2M 第 2 版规范中的标准对象,即

JwtClaims claims = new JwtClaims();
claims.setIssuer("DAS@ServiceProvider");  
claims.setAudience("CSE001"); //
.....
.........
TokenPermissions tokenPerms = new TokenPermissions();
TokenPermission tokenPerm = new TokenPermission();
tokenPerm.getResourceIDs().add("RXYZ");
tokenPerm.setPrivileges(setOfAcr);// setOfACr is another object on oneM2M    
tokenPerms.getPermission().add(tokenPerm);
claims.setClaim("permissions",tokenPerms);

以上代码片段生成以下 JWT 声明集 {iss=DAS@ServiceProvider, aud=CSE001, exp=1508999613, jti=H1wm_yaOe61Co-wND7wBAw@DAS@CDOT-SP, iat=1508996013, nbf=1508995953, sub=subject, email=mail@example.com , groups=[group-one, other-group, group-three], version=1.0.0, permissions=cdot.onem2m.resource.xsd.TokenPermissions@7f3b97fd}

整个令牌都通过了签名和声明验证,但是我什么时候尝试通过错误将权限属性类型转换为 TokenPermissions。

tokenPermsObject =     jwtClaims.getClaimValue("permissions",TokenPermissions.class);

它通过以下错误: org.jose4j.jwt.MalformedClaimException:'permissions' 声明的值不是预期的类型(xyz.xsd.TokenPermissions@7f3b97fd - 无法将 java.lang.String 转换为 xyz.xsd.TokenPermissions.TokenPermissions)

在jose4j JWT中可以传递什么类型的声明对象,我是否必须在声明集中强制传递文本。任何帮助将不胜感激。

jose4j 的 JSON 处理源自 JSON.simple 工具包,在 JSON 和 Java 对象之间的转换方式相当基础。它将执行字符串、数字、布尔值、映射和列表。

如果您 want/need 使用更复杂的 JSON 库,您可以在创建 JWT 时在 JsonWebSignature 上使用 setPayload(...) 并给它 JSON 你在别处制作的字符串。当使用 JWT 时,JwtClaims 上的 String getRawJson() 将为您提供 JSON 字符串有效负载,您可以将其传递给其他一些库。