Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jose4j-JWT';s索赔集';s属性类型而不是字符串对象_Jwt_Jose4j_Onem2m - Fatal编程技术网

jose4j-JWT';s索赔集';s属性类型而不是字符串对象

jose4j-JWT';s索赔集';s属性类型而不是字符串对象,jwt,jose4j,onem2m,Jwt,Jose4j,Onem2m,我一直在使用jose4j版本0.6.0生成Json Web令牌(JWT)。在令牌生成、令牌验证之前,一切正常。JWT的声明有效负载可以有许多元素,如版本、令牌ID、颁发者、权限等。我正在传递令牌权限对象,它是oneM2M第2版规范中的标准对象,即 JwtClaims claims = new JwtClaims(); claims.setIssuer("DAS@ServiceProvider"); claims.setAudience("CSE001"); // ..... ........

我一直在使用jose4j版本0.6.0生成Json Web令牌(JWT)。在令牌生成、令牌验证之前,一切正常。JWT的声明有效负载可以有许多元素,如版本、令牌ID、颁发者、权限等。我正在传递令牌权限对象,它是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,子对象,电子邮件=mail@example.com,groups=[第一组,另一组,第三组],version=1.0.0,permissions=cdot.onem2m.resource.xsd。TokenPermissions@7f3b97fd}

token的完整性通过签名和声明验证,但当我尝试将typecast权限属性设置为TokenPermissions时,它会出错

tokenPermsObject =     jwtClaims.getClaimValue("permissions",TokenPermissions.class);
它通过以下错误执行: org.jose4j.jwt.MalformedClaimeException:“权限”声明的值不是预期的类型(xyz.xsd)。TokenPermissions@7f3b97fd-无法将java.lang.String强制转换为xyz.xsd.TokenPermissions.TokenPermissions)


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

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


如果您想要/需要使用更复杂的JSON库,您可以在创建JWT时使用
JsonWebSignature上的
setPayload(…)
,并将您在别处生成的JSON字符串提供给它。当使用JWT时,
JwtClaims
上的
String getRawJson()
将为您提供JSON字符串负载,您可以将其传递给其他库

感谢Brain的回复和帮助,我还尝试在发送方端序列化复杂的java对象,并将其反序列化回接收方端。你知道为什么Json序列化在Jose4J中不受支持吗?他们有计划在未来的版本中支持Json序列化吗?