我一直在使用 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 中传递,我是否必须强制在声明集中传递文本。任何帮助将不胜感激。