jose4j JWT的声明集的字符串对象以外的属性类型

时间:2017-10-26 08:33:11

标签: jwt jose4j onem2m

我一直在使用jose4j版本0.6.0进行Json Web Token(JWT)生成。一切都是良好的直到令牌生成,令牌验证。 JWT的声明有效载荷可以有多个元素,如版本,tokenId,issuer,权限等。我传递的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中可以传递哪种类型的声明对象,我是否必须在声明集中强制传递文本。任何帮助将受到高度赞赏。

1 个答案:

答案 0 :(得分:1)

jose4j的JSON处理源自JSON.simple工具包,并且在如何在JSON和Java对象之间进行转换方面相当基础。它将执行字符串,数字,布尔值,地图和列表。

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