jose4j Тип атрибута набора утверждений JWT, отличный от строкового объекта

Я использую jose4j версии 0.6.0 для генерации Json Web Token(JWT). Все хорошо до генерации токенов, верификации токенов. Полезная нагрузка утверждений JWT может иметь ряд элементов, таких как версия, идентификатор токена, издатель, разрешения и т. Д. Я передаю объект TokenPermissions, который является стандартным объектом в спецификации oneM2M release 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=[group-one, other-group, group-three], версия =1.0.0, permissions=cdot.onem2m.resource.xsd.TokenPermissions@7f3b97fd}

Целому токену проходит проверка подписи и утверждения, но когда я пытаюсь передать атрибут разрешения Typecast TokenPermissions через ошибку.

tokenPermsObject =     jwtClaims.getClaimValue("permissions",TokenPermissions.class);

Ошибка ниже: org.jose4j.jwt.MalformedClaimException: значение утверждения 'permissions' не является ожидаемым типом (xyz.xsd.TokenPermissions@7f3b97fd - Невозможно привести java.lang.String к xyz.xsd.TokenPermissions.TokenPermissions.TokenPermissions.TokenPermissions.TokenPermissions.TokenPermissions.TokenPermissions.TokenPermissions.TokenPermissions.TokenPermissions.TokenPermissions.TokenPermissions.TokenPermissions)

Какой тип объекта утверждений может быть передан в jose4j JWT, должен ли я обязательно передавать текст в наборе утверждений. Любая помощь будет высоко оценен.

1 ответ

Решение

JSON-обработка jose4j была получена из инструментария JSON.simple и довольно проста в том, как она преобразует объекты JSON в Java. Это будет делать строки, числа, логические, карты и списки.

Если вы хотите / должны использовать более сложную библиотеку JSON, вы можете использовать setPayload(...) на JsonWebSignature при создании JWT и присвойте ей строку JSON, которую вы создали в другом месте. И при употреблении JWT, String getJwt() на JwtContext даст вам полезную нагрузку строки JSON, которую вы можете передать другой библиотеке.

Другие вопросы по тегам