jose4j JWT 的声明集的属性类型不是字符串对象
jose4j JWT's claims set's attribute type other than string object
我一直在使用 jose4j 版本 0.6.0 来生成 Json Web 令牌 (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);
以上代码片段生成以下 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中可以传递什么类型的声明对象,我是否必须在声明集中强制传递文本。任何帮助将不胜感激。
jose4j 的 JSON 处理源自 JSON.simple 工具包,在 JSON 和 Java 对象之间的转换方式相当基础。它将执行字符串、数字、布尔值、映射和列表。
如果您 want/need 使用更复杂的 JSON 库,您可以在创建 JWT 时在 JsonWebSignature
上使用 setPayload(...)
并给它 JSON 你在别处制作的字符串。当使用 JWT 时,JwtClaims
上的 String getRawJson()
将为您提供 JSON 字符串有效负载,您可以将其传递给其他一些库。
我一直在使用 jose4j 版本 0.6.0 来生成 Json Web 令牌 (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);
以上代码片段生成以下 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中可以传递什么类型的声明对象,我是否必须在声明集中强制传递文本。任何帮助将不胜感激。
jose4j 的 JSON 处理源自 JSON.simple 工具包,在 JSON 和 Java 对象之间的转换方式相当基础。它将执行字符串、数字、布尔值、映射和列表。
如果您 want/need 使用更复杂的 JSON 库,您可以在创建 JWT 时在 JsonWebSignature
上使用 setPayload(...)
并给它 JSON 你在别处制作的字符串。当使用 JWT 时,JwtClaims
上的 String getRawJson()
将为您提供 JSON 字符串有效负载,您可以将其传递给其他一些库。