【发布时间】:2020-01-11 21:31:13
【问题描述】:
我一直在使用 jose4j 0.6.0 版来生成 Json Web Token(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);
上面的 sn-p 代码生成以下 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}
token 的整体通过了签名和声明验证,但是我什么时候尝试通过错误将 typecast 权限属性传递给 TokenPermissions。
tokenPermsObject = jwtClaims.getClaimValue("permissions",TokenPermissions.class);
它通过以下错误: org.jose4j.jwt.MalformedClaimException:“权限”声明的值不是预期的类型(xyz.xsd.TokenPermissions@7f3b97fd - 无法将 java.lang.String 转换为 xyz.xsd.TokenPermissions.TokenPermissions)
可以在 jose4j JWT 中传递什么类型的声明对象,我是否必须强制在声明集中传递文本。任何帮助将不胜感激。
【问题讨论】: