Выделение заголовков из одного запроса почтальона и внедрение их в другие - PullRequest
0 голосов
/ 04 сентября 2018

Мой веб-сервис использует аутентификацию на основе маркера авторизации на основе JWT:

  1. HTTP-клиенты отправляют действительный POST на /v1/auth/signIn с действительным объектом запроса JSON (включает имя пользователя + пароль)
  2. Если они успешно проходят проверку подлинности, эта конечная точка отправляет обратно маркер носителя аутентификации в виде заголовка ответа HTTP, который (из curl) выглядит следующим образом:

Ответ от curl:

HTTP/1.1 200 OK
Date: Tue, 04 Sep 2018 01:18:28 GMT
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Access-Control-Expose-Headers: Authorization
Authorization: Bearer <big_huge_string>
Content-Length: 0
  1. Последующие сервисные вызовы к аутентифицированным конечным точкам просто должны включить токен в качестве заголовка HTTP-запроса, ключ / имя которого Authorization и значение которого Bearer <xyz> (где <xyz>) - это <big_huge_string>, который пришел вернуться на знак в вызове выше. Довольно простой стандартный материал JWT.

Я пытаюсь написать коллекцию Postman, которая начинается с " запроса на вход ", который успешно выполняет вход и получает токен JWT от службы, а затем добавляет соответствующий заголовок HTTP-запроса в каждый последующий звонок. Любые идеи относительно того, как я могу:

  1. Извлечь <big_huge_string> из заголовка ответа HTTP, который я получу из моего запроса на вход ?; а затем
  2. Как сохранить это <big_huge_string> как переменную и вставить это как заголовок HTTP-запроса для всех последующих вызовов?

Заранее спасибо!


Обновление

Попробовал предложение:

enter image description here

Становится ближе, но console.log(...) ничего не печатает на Почтальоне (или, по крайней мере, я не знаю, где его искать). Я должен отметить, что я не , использующий версию Postman для Chrome Application, но автономное приложение / исполняемый файл (Версия 6.1.4):

Любые идеи, как / где я могу получить console.log(...) работает? Я беспокоюсь только о том, чтобы изменить тест на:

pm.test("Can Extract JWT", function() {
   var authHeader = pm.response.headers.toObject().Authorization;
   pm.expect(authHeader).to.not.be.equal(null);
   pm.globals.set('token', authHeader)
});

Даже не увидев, что это такое authHeader. Есть идеи?!

1 Ответ

0 голосов
/ 04 сентября 2018

Получив значение токена, вы можете ссылаться на него в каждом из заголовков запроса, используя синтаксис {{token}}. Это получить знак в заголовке Auth, что сложнее.

Вы можете использовать pm.response.headers, чтобы получить список заголовков, а затем извлечь нужное значение.

Это возвращается в виде списка, поэтому, возможно, использование чего-то вроде Lodash или преобразование этого в объект может помочь получить нужное вам значение. Это будет что-то вроде pm.response.headers.toObject().Authorization - я не пробовал, поэтому мой синтаксис может быть немного неправильным.

Вы можете записать Заголовки на консоль Почтальона и сузить их таким образом - просто оберните их в оператор Console.log().

Когда вы получаете это значение, это просто базовый pm.globals.set('token, pm.response.headers.toObject().Authorization), чтобы сохранить это глобально.

...