Секреты JWT |
01.10.2020 00:00 |
Автор: Кристин Джеквони (Kristin Jackvony) Пользовались ли вы когда-нибудь JWT? Скорее всего, да, если вы хоть раз тестировали продукт с аутентификацией или авторизацией! Термин JWT произносится как "джот" и расшифровывается как JSON Web Token. JWT создаются компанией Auth0, чья цель – предоставить продуктам метод определения, есть ли у пользователя необходимые права для доступа к ресурсу. Чем хороши JWT? Они позволяют приложению проверить авторизационные данные, не передавая логин, пароль или куки. Перехватить можно любые запросы, но JWT не содержит персональных данных и зашифрован, поэтому его перехват не принесет особой пользы (чтобы узнать больше о разнице между токенами и куки, см. статью). Давайте посмотрим, как создаются JWT. JWT состоит из трех частей, которые образованы из последовательностей букв и цифр, и разделены точками. Один из лучших способов изучить JWT – это попрактиковаться с официальным JWT-дебаггером, поэтому сходите на jwt.io и проскролльте вниз, пока не увидите раздел Debugger. Часть первая: заголовок Заголовок содержит алгоритм, который используется для шифрования JWT, а также тип токена (который, конечно, JWT): { Часть вторая: данные В данных содержатся утверждения пользователя. Существует три типа утверждений: Зарегистрированные утверждения: это стандартные, предопределенные кодом JWT утверждения.
Публичные утверждения: это другой тип часто использующихся утверждений, и они добавляются в реестр JWT. Примеры – это имя, почта, временная зона. Частные утверждения: эти утверждения определены создателями приложения, и специфичны для компании. К примеру, компания может назначить специфический userId всем своим пользователям, и это включается в утверждения. Вот пример из дебаггера jwt.io: { Здесь объект – 1234567890 (не очень-то внятный объект), имя пользователя, у которого есть доступ к объекту – Джон До, а токен был выпущен в 1516239022 по Юникс-времени. Не понимаете, что значит это время? Используйте конвертер, чтобы выяснить это! Часть третья: подпись Подпись берет первые две секции и кодирует их в Base64. Затем к этим закодированным секциям добаляется секретный ключ – длинная строка букв и цифр. И наконец подпись шифрует все целиком по алгоритму HMAC SHA256. См. мою статью, чтобы узнать больше о шифровании и кодировании. Сводим все воедино JWT состоит из закодированного Заголовка, точки, закодированных Данных, точки, и закодированной подписи. Дебаггер JWT подсвечивает три секции разными цветами, чтобы их можно было различить. Если вы регулярно пользуетесь JWT в тестируемом ПО, попробуйте взять какой-то из них и посмотреть на него через JWT-дебаггер. Расшифрованные данные расскажут вам о том, как работает ваше приложение. Если у вас нет JWT, сделайте свой! Вы можете вставлять данные в секцию Payload дебаггера и посмотреть, как меняется зашифрованный JWT: { При декодировании реального JWT подпись не расшифровывается – секрет есть секрет! Но так как первые две части JWT закодированы, а не зашифрованы – их можно декодировать. Использование JWT Использовать JWT можно по-разному, но распространенный метод – передавать их в API-запросах через Bearer-токен. В Postman это выглядит примерно так:
Тестирование JWT Теперь, когда мы разобрались с JWT, как же их тестировать?
Удачи, и хорошего тестирования! |