1

我一直在使用 jose4j 0.6.0 版来生成 Json Web 令牌(JWT)。直到令牌生成,令牌验证,一切都很好。JWT 的声明有效负载可以包含许多元素,例如版本、令牌 ID、颁发者、权限等。我正在传递 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 Claim Set {iss=DAS@ServiceProvider, aud=CSE001, exp=1508999613, jti=H1wm_yaOe61Co-wND7wBAw@DAS@CDOT-SP, iat=1508996013, nbf=1508995953, sub=subject, email= mail@example.com,组=[组一,其他组,组三],版本=1.0.0,权限=cdot.onem2m.resource.xsd.TokenPermissions@7f3b97fd}

令牌的整体通过签名和声明验证,但是我什么时候尝试通过错误将类型转换权限属性传递给 TokenPermissions 它。

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

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

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

4

1 回答 1

1

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

如果您想/需要使用更复杂的 JSON 库,您可以在创建 JWT 时使用setPayload(...)JsonWebSignature并为其提供您在其他地方生成的 JSON 字符串。并且在使用 JWT 时,String getRawJson()onJwtClaims将为您提供 JSON 字符串有效负载,您可以将其移交给其他一些库。

于 2017-10-27T17:18:03.400 回答