Отправка токена JWT в заголовках с почтальоном

169

Я тестирую реализацию безопасности на основе токенов JWT, основанную на следующей статье . Я успешно получил токен с тестового сервера. Я не могу понять, как заставить клиентскую программу Chrome POSTMAN REST отправлять токен в заголовке.

скриншот почтальона

Мои вопросы следующие:

1) Я использую правильное имя заголовка и / или интерфейс POSTMAN?

2) Нужно ли на базе 64 кодировать токен? Я думал, что смогу просто отправить токен обратно.

Диод Дан
источник
Привет, где я могу увидеть в POSTMAN токен jwt, который я получил?
Usr
1
@MLondei, это зависит от того, как настроен принимающий сервер. Он может возвращаться как URL (найти его в строке URL) или возвращаться в теле ответа (найти его в поле тела ответа). Это те два основных, о которых я знаю.
Диод Дан
linkrot. новая ссылка: auth0.com/docs/design/web-apps-vs-web-apis-cookies-vs-tokens
нилон

Ответы:

277

Для имени заголовка запроса просто используйте Авторизацию. Поместите Носителя перед Жетоном. Я только что попробовал, и это работает для меня.

Авторизация: предъявитель TOKEN_STRING

Каждая часть JWT является закодированным значением base64url.

Мик Каллен
источник
61
Как пояснение, поле «Заголовок» становится авторизацией, а поле «Значение» становится носителем [WHITESPACE] <your-code-here>
Diode Dan
Вы знаете, какая часть поля зашифрована? Похоже, что данные сразу после последнего '.' разделитель дает мне то, что выглядит как мусорные символы. Я предполагаю, что это фактически информация, зашифрованная генератором токенов?
Диод Дан
5
Проверьте jwt.io. Есть раздел, где вы можете вставить JWT и просмотреть его декодированное содержимое, это лучший способ увидеть, что происходит. Секретная строка сервера используется для создания последней секции токена. JWT только подписывает, что полезная нагрузка не шифрует, то есть вы можете декодировать части 1 и 2 строки, но не можете проверить ее без секрета. self-issued.info/docs/draft-ietf-oauth-json-web-token.html
Мик Каллен
4
Может кто-нибудь объяснить, почему мы должны поставить Bearer перед JWT? Это какой-то сигнал серверу, что это JWT?
user137717
3
Это просто соглашение - вы можете найти все подробности здесь: jwt.io/introduction
Майкл Нойб
134

Вот изображение, если это помогает :)

Почтальон

Обновить:

Команда почтальона добавила «токен на предъявителя» на «вкладку авторизации»: Обновленный почтальон

prasanthv
источник
40

Я добавляю к этому вопросу несколько интересных советов, которые могут помочь вам, ребята, тестирующие JWT Apis.

Это очень просто на самом деле.

Когда вы входите в свой Api (конечная точка входа в систему), вы немедленно получаете свой токен, и, как сказал @ mick-cullen, вам придется использовать JWT в заголовке как:

Authorization: Bearer TOKEN_STRING

Теперь, если вы хотите автоматизировать или просто облегчить себе жизнь, в своих тестах вы можете сохранить токен как глобальный, который вы можете вызывать на всех других конечных точках как:

Authorization: Bearer {{jwt_token}}

На почтальоне: Затем создайте глобальную переменную в почтальоне как jwt_token = TOKEN_STRING.

На вашей конечной точке входа в систему: Чтобы сделать это полезным, добавьте в начале вкладки Тесты добавьте:

var data = JSON.parse(responseBody);
postman.clearGlobalVariable("jwt_token");
postman.setGlobalVariable("jwt_token", data.jwt_token);

Я предполагаю, что ваш API возвращает токен как json в ответе: {"jwt_token": "TOKEN_STRING"}, возможно, есть какое-то изменение.

В первой строке вы добавляете ответ в переменную данных. Очистите свой глобальный и назначьте значение.

Итак, теперь у вас есть свой токен для глобальной переменной, что упрощает использование Authorization: Bearer {{jwt_token}} на всех ваших конечных точках.

Надеюсь, этот совет поможет.


РЕДАКТИРОВАТЬ
Что-то для чтения

О тестах на Почтальоне: примеры тестирования

Командная строка: Ньюман

CI: интеграция с Дженкинсом

Хороший пост в блоге: мастер автоматизации тестирования API

Пабло Паласиос
источник
Интересно, что я не знаком с концепцией Testвкладки и почтальонским кодированием. Есть ли ресурс, который вы рекомендуете начать с этого?
Диод Дан
Да, есть некоторые, которые я нашел полезными: * getpostman.com/docs/testing_examples * blog.testproject.io/2016/06/22/master-api-test-automation * sm-cloud.com/testing-api-with почтальон
Пабло Паласиос
На самом деле Postman действительно интересный и довольно сильный, когда дело доходит до автоматизированного тестирования. Вы можете настроить почтальон таким образом, чтобы он мог создавать произвольные данные Глобальные переменные или переменные окружения, которые можно запускать в тестах. И делать итеративные прогоны и тестировать любой ответ как модульные тесты конечной точки. Сохраните их и найдите ошибки при изменении кода. Я не использовал утилиту командной строки, но я понимаю, что вы можете настроить ее для работы в вашем ci-pipe.
Пабло Паласиос
Вы можете прочитать о командной строке здесь: getpostman.com/docs/newman_intro
Пабло Паласиос
9

У меня была та же проблема в Flaskи после попытки первых 2 решений, которые одинаковы ( Authorization: Bearer <token>), и получить это:

{
    "description": "Unsupported authorization type",
    "error": "Invalid JWT header",
    "status_code": 401
}

Мне удалось наконец решить это с помощью:

Authorization: jwt <token>

Думаю, это может сэкономить время людям, которые сталкиваются с тем же.

Vučko
источник
1
Я был Authentication credentials were not providedв djangoиспользовании Bearer <token>. решено с jwt <token>. Спасибо за решение
S_M
7

Вот как установить токен это автоматически

На ваш логин / запрос авторизации

введите описание изображения здесь

Тогда для аутентифицированной страницы

введите описание изображения здесь

Эмека Мбах
источник
4

Если вы хотите использовать почтальон, правильный способ - использовать заголовки как таковые

ключ: авторизация

значение: jwt {токен}

так просто, как, что.

Adi
источник
2

Для людей, которые используют плагин Wordpress Advanced Access Manager, чтобы открыть аутентификацию JWT.

Поле заголовка должно поставить аутентификацию вместо авторизации

введите описание изображения здесь

AAM упомянул об этом в своей документации ,

Заметка! AAM не использует стандартный заголовок авторизации, поскольку он пропускается большинством серверов Apache. ...


Надеюсь, это поможет кому-то! Спасибо за другие ответы мне тоже очень помогли !!

jeffsama
источник
2
  1. Открытый почтальон.
  2. перейдите в поле «заголовок».
  3. там можно увидеть пробелы «значение ключа».
  4. в ключе типа "Авторизация".
  5. в типе значения "Bearer (пробел) your_access_token_value".

Готово!

Dheeraj
источник
2

введите описание изображения здесь

Все остальное т.е. Параметры, Авторизация, Тело, Сценарий предварительного запроса, Тесты пустые, просто откройте вкладку Заголовки и добавьте, как показано на рисунке. То же самое и для запроса GET.

кода
источник
0

Почему-то почтальон у меня не работал. Мне пришлось использовать расширение Chrome под названием RESTED, которое работало.

RamanSM
источник
0

Я сделал так, как упомянул moplin. Но в моем случае служба отправляет JWT в заголовках ответа, как значение под ключом «Авторизация».

Authorization →Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJpbWFsIiwiZXhwIjoxNDk4OTIwOTEyfQ.dYEbf4x5TGr_kTtwywKPI2S-xYhsp5RIIBdOa_wl9soqaFkUUKfy73kaMAv_c-6cxTAqBwtskOfr-Gm3QI0gpQ

Я сделал глобальную переменную в почтальоне как

кнопочная> JWT
ценностно> blahblah

в запрос входа в систему -> вкладка Тесты, добавить

postman.clearGlobalVariable("jwt");
postman.setGlobalVariable("jwt", postman.getResponseHeader("Authorization"));

в других запросах выберите вкладку Заголовки и введите

кнопочная> Авторизация

Значение -> {{JWT}}

Ясита Бандара
источник
0

В Почтальоне последней версии (7 ++) может быть нет поля «Носитель» в Авторизации. Перейдите на вкладку «Заголовок».

выберите ключ в качестве Авторизации и в значение напишите JWT

Абхишек Ядав
источник
Для v7.19.0 +, и это также было там некоторое время, Bearer Tokenво Authorizationвкладке есть помощник , добавление значения токена здесь (в жестком коде или в качестве динамической переменной) создаст тот же Authorizationзаголовок для запроса.
Дэнни Дейнтон