Используйте токен JWT, созданный Python в Java

У меня есть интересный вопрос. Я использую python с Flask для службы аутентификации, которая генерирует токены JWT с помощью flask_jwt_extended. Вот как я генерирую токены в Python с помощью Flask JWT Extended.

identity = {
        "firstname": user.firstname,
        "lastname": user.lastname,
        "email": user.email,
        "uuid": user.user_uuid,
        'user_id': user.id
    }
access_token = create_access_token(identity=identity, fresh=True)

В конфигурации я указываю секретный ключ JWT и алгоритм JWT:

JWT_SECRET_KEY = "this-really-needs-to-be-changed"
JWT_ALGORITHM = "HS256"

В Java я использую библиотеку jjwt (io.jsonwebtoken, jjwt, 0.9.0) для декодирования JWT, который я делаю:

Claims userJWT = Jwts.parser()
                    .setSigningKey("this-really-needs-to-be-changed")
                    .parseClaimsJwt(token)
                    .getBody();

Но в Java я получаю исключение, если запускаю это, я действительно не понимаю, в чем проблема, потому что алгоритм тот же и токен.

Я часами пытаюсь понять, в чем проблема, потому что для меня это не имеет смысла,

исключение:

  : JWT signature does not match locally computed signature. JWT validity cannot be asserted and should not be trusted.

io.jsonwebtoken.SignatureException: JWT signature does not match locally computed signature. JWT validity cannot be asserted and should not be trusted.
        at io.jsonwebtoken.impl.DefaultJwtParser.parse(DefaultJwtParser.java:354) ~[jjwt-0.9.0.jar!/:0.9.0]
        at io.jsonwebtoken.impl.DefaultJwtParser.parse(DefaultJwtParser.java:481) ~[jjwt-0.9.0.jar!/:0.9.0]
        at io.jsonwebtoken.impl.DefaultJwtParser.parseClaimsJws(DefaultJwtParser.java:541) ~[jjwt-0.9.0.jar!/:0.9.0]

person ghovat    schedule 23.03.2018    source источник
comment
Какое исключение?   -  person Oliver Charlesworth    schedule 24.03.2018
comment
@OliverCharlesworth, извините, _ забыл добавить. Добавил это сейчас к исходному вопросу   -  person ghovat    schedule 24.03.2018
comment
Ошибка не связана с Python. Класс Java javax.xml.bind.DatatypeConverter устарел в Java 9. Проверьте версию Java.   -  person    schedule 25.03.2018
comment
Спасибо, я добавил jaxb-api, который решил проблему с привязкой XML.   -  person ghovat    schedule 26.03.2018


Ответы (1)


Вероятно, это проблема с кодировкой ключей, потому что для вашей java-библиотеки требуется ключ с кодировкой base64. См. DefaultJwtParser.

public JwtParser setSigningKey(String base64EncodedKeyBytes) {

Пожалуйста, попробуйте это:

Claims userJWT = Jwts.parser()
                .setSigningKey(Base64.getEncoder().encodeToString("this-really-needs-to-be-changed"))
                .parseClaimsJwt(token)
                .getBody();
person pedrofb    schedule 27.03.2018