Надсилання жетону JWT в заголовки разом з "Поштальон"


169

Я тестую реалізацію безпеки на базі JWT Token на основі наступної статті . Я успішно отримав маркер від тестового сервера. Я не можу зрозуміти, як змусити клієнтську програму Chrome POSTMAN REST надсилати маркер у заголовок.

скріншот листоноші

Мої запитання такі:

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

2) Чи потрібно, щоб база 64 кодувала маркер? Я думав, що можу просто відправити маркер назад.


Привіт, де я можу побачити в POSTMAN маркер jwt, який я отримав?
Usr

1
@MLondei, це залежить від способу налаштування приймаючого сервера. Він може повернутися у вигляді URL-адреси (знайти його в рядку URL-адреси) або повернутися в тіло відповіді (знайти його в полі тіла відповіді). Це два основні, про які я знаю.
Діод Дан

лінкрот. нове посилання: auth0.com/docs/design/web-apps-vs-web-apis-cookies-vs-tokens
nilon

Відповіді:


277

Для запиту ім'я заголовка просто використовуйте Авторизація. Розмістіть пред'явника перед токеном. Я просто спробував це, і це працює на мене.

Авторизація: носій TOKEN_STRING

Кожна частина JWT є кодованим базовим значенням.


61
Так само як уточнення, поле "Заголовок" стає Авторизацією, а поле "Значення" стає Носієм [WHITESPACE] <Ваш код -тут>
Діод, День

Чи знаєте ви, яка частина поля зашифрована? Видається, що дані одразу після останнього '.' роздільник дає мені те, що схоже на символи сміття. Я припускаю, що це насправді інформація, зашифрована генератором Token?
Діод Дан

5
Перевірте jwt.io. Є розділ, де можна вставити JWT і переглянути його розшифрований вміст, найкращий спосіб бачити, що відбувається. Секретна серверна рядок використовується для створення останнього розділу маркера. JWT лише підписує, що корисне навантаження не шифрується, тобто ви можете декодувати частину 1 та 2 рядка, але не можете перевірити його без секрету. self-issued.info/docs/draft-ietf-oauth-json-web-token.html
Мік Каллен

4
Чи може хтось, будь ласка, детальніше пояснити, чому нам потрібно поставити пред'явника перед JWT? Це якийсь сигнал серверу, що це JWT?
користувач137717

3
Це лише умова
Майкл Нойб

134

Ось зображення, якщо воно допомагає :)

Листоноша

Оновлення:

Команда листоноші додала "Маркер носія" на "вкладку авторизації": Оновлений листоноша


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"}, можливо, є якась зміна.

У першому рядку ви додаєте відповідь до змінної даних. Очистіть глобальний і призначте значення.

Тепер у вас є маркер глобальної змінної, що полегшує використання Авторизація: Носій {{jwt_token}} для всіх ваших кінцевих точок.

Сподіваюся, ця порада допомагає.


РЕДАКТИ
Щось читати

Про тести на Postman: приклади тестування

Командний рядок: Ньюмен

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

Приємна публікація в блозі: майстер тестування api тестування


Цікаво, що я не знайомий з концепцією Testвкладки та кодуванням Postman. Чи є ресурс, який ви рекомендуєте почати з цього?
Діод Дан


Насправді поштальон справді цікавий і досить сильний, коли справа стосується автоматизованого тестування. Ви можете налаштувати листоношу таким чином, щоб він міг будувати випадкові дані Глобальні змінні чи змінні середовища, які можна запускати на тестах. І виконайте ітеративні запуски та протестуйте будь-яку відповідь як тести одиниць кінцевої точки. Збережіть їх і знайдіть помилки при зміні коду. Я не використовував утиліту командного рядка, але я розумію, що ви можете налаштувати її для роботи у вашому ci-pipeline.
Пабло Паласіос

Про командний рядок ви можете прочитати тут: getpostman.com/docs/newman_intro
Пабло Паласіос

9

У мене була та сама проблема в Flaskі після спробу перших двох рішень, які однакові (Authorization: Bearer <token> ), і отримати це:

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

Мені вдалося остаточно вирішити це за допомогою:

Authorization: jwt <token>

Думав, що це може заощадити деякий час людям, які стикаються з тим самим.


1
Я вступав Authentication credentials were not providedу djangoкористування Bearer <token>. вирішено с jwt <token>. Дякую за рішення
S_M

7

Ось як встановити маркер цього автоматично

На ваш вхід / авторизований запит

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

Потім для аутентифікованої сторінки

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


4

Якщо ви хочете скористатися листоношею, правильним способом є використання заголовків як таких

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

значення: jwt {token}

так просто.


2

Для людей, які використовують плагін WordPress Advanced Access Manager, щоб відкрити автентифікацію JWT.

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

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

AAM згадував це у своїй документації ,

Примітка! AAM не використовує стандартний заголовок авторизації, оскільки його пропускає більшість серверів Apache. ...


Сподіваюся, це комусь допоможе! Спасибі за інші відповіді мені також допомогли багато !!


2
  1. Відкритий листоноша.
  2. перейдіть до поля "заголовок".
  3. там можна побачити пробіли "ключового значення".
  4. у ключі типу "Авторизація".
  5. у значенні типу "Носій (пробіл) your_access_token_value".

Готово!


2

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

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


0

Якось поштальон не працював на мене. Мені довелося використовувати хромоване розширення під назвою RESTED, яке спрацювало.


0

Я робив так, як згадував moplin. Але в моєму випадку служба надсилає JWT у заголовках відповідей як значення під клавішею "Авторизація".

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

Що я зробив, зробити глобальну змінну в листоноші як

key-> jwt
value-> blahblah

у запиті для входу-> Вкладка Тести, додати

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

в інших запитах перейдіть на вкладку Заголовки та надайте

ключ-> Авторизація

значення -> {{jwt}}


0

В останній версії Postman (7 ++) може бути відсутність поля Bearer в Авторизація. Тому перейдіть на вкладку заголовка

виберіть ключ як Авторизація та у значенні напишіть JWT


Для v7.19.0 +, і він також був деякий час, Bearer Tokenна Authorizationвкладці є помічник , додаючи тут значення маркера (Hardcoded або як динамічна змінна) створить такий самий Authorizationзаголовок для запиту.
Danny Dainton
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.