Привет всем, я Надежда Дудник, главный инженер по тестированию в Сбере, ментор по тестированию ПО и автор канала по тестированию @protestinginfo.

Хочу вам рассказать о важности написания хорошо структурированных тестовых сценариев на примере стратегии их составления для бэкенда.

Содержание

Введение

Я расскажу про один из способов авторизации в Postman и Insomnia с помощью сертификатов. Мы часто используем его в своих проектах. Эта инструкция будет полезна начинающим специалистам и коллегам. Итак, вперёд за знаниями.

Postman и Insomnia — инструменты для тестирования REST API (клиенты взаимодействия с API). На момент написания статьи были версии Postman 12.0.1 и Insomnia 12.4.0.

Понятия авторизации, аутентификации и токена

Вкратце процесс получения доступа к системе выглядит так: идентификация → аутентификация → авторизация. Разберёмся с основными терминами.

Аутентификация нужна, чтобы проверить право доступа к данным. То есть проверить пользователя на его подлинность. Иными словами, аутентификация определяет, кто вы, с помощью комбинации логина и пароля или биометрических данных.

Авторизация — это получение доступа к системе после успешной аутентификации. То есть система определяет, какие права у вас есть, что вам разрешено делать.

Токен — закодированная строка символов с некоторой структурой, содержащая полезные данные пользователя. Клиент передаёт эту строку приложению при каждом запросе, чтобы система могла идентифицировать клиент, то есть понять, кто прислал запрос.

Дополнительные способы аутентификации

Basic Auth

Это самый простой способ: используются логин и пароль, которые кодируются в формат Base64 и отправляются в заголовке HTTP‑запроса Authorization.

Для этого нужно в Postman выбрать тип Basic Auth, после этого вы получите токен и можете дальше работать с API.

Важно: этот метод используют для не конфиденциальных данных или в защищённой сети с использованием SSL/TLS, потому что перехваченные данные легко расшифровать.

Обычно для базовой аутентификации используют префикс Basic.

Bearer Token

Bearer‑токен — это уникальный ключ, который используют для аутентификации и авторизации доступа к ресурсам. Он представляет собой строку, которую пользователь должен передавать в заголовке Authorization. Формат заголовка: Authorization: Bearer <значение_токена>

В качестве Bearer‑токена часто используют JWT.

Основные определения для руководства

Client ID. Публичный идентификатор приложения. Это как его «логин», который сообщает серверу, кто именно запрашивает доступ. Не является секретом.

Client Secret. Секретный ключ приложения. Это как его «пароль», который доказывает серверу, что это действительно вы, а не мошенник. Нужно хранить в секрете.

Access Token (токен доступа). Кратковременный ключ‑пропуск. Он выдаётся приложению после успешной авторизации пользователя. Этот токен нужно прикладывать к каждому запросу к API, чтобы получить доступ к защищённым данным. Срок его действия обычно минуты или часы.

Протокол mTLS

mTLS (Mutual Transport Layer Security, или «взаимный TLS») — это протокол, основанный на TLS, но с усиленной защищённостью. Он обеспечивает взаимную аутентификацию: клиент проверяет сервер, а сервер — клиент. Принцип работы mTLS заключается в использовании двух пар сертификатов и двух закрытых ключей. Один закрытый ключ находится на сервере для расшифровки данных, зашифрованных открытым ключом клиента (как в обычном TLS). Второй закрытый ключ устанавливается на клиенте, и сервер также шифрует данные его открытым ключом при ответах. Таким образом, только клиенты, обладающие закрытым ключом для расшифровки данных, могут взаимодействовать с сервером.

Этот метод часто применяют в финтехе. Для работы с mTLS вам выдают специальные файлы сертификатов (например, с расширением.p12,.pfx или keyfile/certfile). В Postman их необходимо настроить в разделе Settings → Certificates, указав путь к файлам и домен, для которого они должны применяться (например, тестовый стенд), ниже я опишу это подробнее. Для обеспечения необходимого уровня защиты канала связи между организацией и банком используют двустороннее TLS‑соединение, для которого необходимо выпустить сертификат.

Алгоритм работы mTLS (Mutual TLS)

  1. Подготовка сертификатов. Необходимо подготовить:

    1. Server Certificate — сертификат сервера;

    2. Client Certificate — сертификат клиента;

    3. CA Certificate — сертификат центра сертификации (CA).

    Сервер настраивает truststore (доверенное хранилище), где в котором лежит и хранится доверенный CA для проверки клиентских сертификатов.

  2. Настройка клиента (Postman или Insomnia). В клиенте указываютсянужно указать:Client Certificate, Private Key и, при необходимости, CA Certificate. После этого клиент может выполнять запросы с использованием mTLS.

  3. Клиент (Postman или Insomnia) отправляет запрос к серверу. Начинается TLS Handshake — процесс установления защищённого соединения между клиентом и сервером перед передачей данных.

  4. Сервер отвечает и отправляет Server Certificate и параметры TLS.

  5. Клиент проверяет сертификат: подпись сертификата (CA), срок действия и совпадение домена. Если проверка не проходит, то соединение разрывается.

  6. Сервер отправляет сообщение: Certificate Request: требует клиентский сертификат для аутентификации.

  7. Клиент отправляет свой сертификатКлиент отправляет:Client Certificate и подтверждениеает владенияе приватным ключом (через криптографическую подпись в handshake).

  8. Сервер проверяет подпись CA, срок действия, статус сертификата и доверие через truststore. Если проверка не проходит — соединение закрывается.

  9. Устанавливается защищённое соединение. Клиент и сервер генерируют сеансовые ключи шифрования.

  10. После завершения TLS handshake клиент отправляет HTTP API‑запрос. Все данные передаются через зашифрованный TLS‑канал.

Главное отличие mTLS от обычного TLS: в TLS проверяется только сервер, клиент анонимный. А в mTLS проверяются и сервер, и клиент, который аутентифицируется сертификатом.

Начало работы

Примером использования mTLS может служить работа со Sber API, где для взаимодействия с API требуется клиентский сертификат в формате .p12:

Для выполнения тестового запроса будем использовать подписку в приложении: https://api.developer.sber.ru/product/DEMOJSON.

Пошаговая инструкция по настройке вызовов SBER API

Будет шесть основных этапов:

  1. Создание пространства и приложения в SBER API.

  2. Подготовка учётных данных и сертификатов.

  3. Настройка доверия к новым сертификатам Минцифры.

  4. Установка адреса шлюза API.

  5. Установка сертификатов в Postman и Insomnia

  6. Проверка работоспособности через тестовый запрос в Postman и Insomnia.

Необходимые компоненты перед началом

  • clientID и clientSecret: будут получены от Сбербанка при создании подписки;

  • контейнер с сертификатом: файл с расширением .p12, выданный Сбербанком, и пароль от него;

  • установленные утилиты:

    • openssl (для работы с сертификатами);

    • curl (для выполнения тестовых запросов).

Практика в mTLS

Создание пространства на SBER API

  1. Перейти на страницу https://api.developer.sber.ru/index.php/login.

  2. Нажать на «Войти по Сбер ID».

  3. Указать номер телефона и нажать на «Войти или создать Сбер ID».

  4. Ввести SMS‑код.

  5. На странице «Все пространства» нажать на «Создать новое пространство».

  6. Указать название пространства. По умолчанию принадлежность пространства указана как «мне».

  7. Нажать на «Создать». Проверить, что пространство создано.

Создание приложения в SBER API

  1. Перейти по ссылке. Демонстрационный API (JSON) позволяет проверить подключение к платформе SberAPI, а также потренироваться в реализации простейших вызовов REST API. Демонстрационный API открыт в пространстве «Тестирование», это указано в правом верхнем углу.

  2. Нажать на «Подключить».

  3. На странице «Новая подписка» в секции «Подключение. Демонстрационный API (JSON)» (тариф → приложение → проверка и подключение) выбрать радиокнопку «Демонстрационный».

  4. Нажать на «Далее». Откроется страница создания приложения.

  5. Заполнить следующие поля:

    • В секции «Создать новое» — «Название приложения» и «Описание приложения». Это информация о новом приложении, которое будет вызывать API. Система сформирует для него clientID, ClientSecret и сертификат.

    • В секции «Сертификат» — «Пароль» и «Подтверждение пароля». Пароль потребуется для установки сертификата. После нажатия на кнопку «Создать» система сгенерирует сертификат, который будет доступен для скачивания.

  6. Нажать на «Подключить».

  7. Убедиться, что подписка готова, активирована и работает. Нажать на «Скачать сертификат» (если вы закроете форму, то больше не сможете его скачать, придётся в настройках приложения его отзывать и выпускать новый), а также скопировать и сохранить ключи для вызова API — clientID и clientSecret (обязательно сохраните куда‑нибудь clientSecret! В случае утери новый можно будет получить в настройках приложения).

  8. Убедиться, что серфикат скачан с расширеним .p12, сохранены значения ключей для вызова API — clientID и clientSecret.

  9. Нажать «В приложение».

Поздравляю, пространство и приложение созданы! Приложение зарегистрировано, и для защищённого TLS‑соединения выпущен сертификат.

Подготовка учётных данных и сертификатов

Ваш файл .p12 — это контейнер, в котором «упакованы» ваш приватный ключ и сертификаты. Для работы большинству систем требуются эти компоненты в виде отдельных файлов. Есть подробные инструкции: Добавление цепочки в SSL‑сертификат PKCS12 (P12, PFX) и конвертация в CRT/CER и Настройки вызова API.

OpenSSL — это многофункциональный инструмент, доступный на большинстве Linux‑систем, а также существует версия для Windows. Он необходим для обработки SSL‑сертификатов и обеспечения их правильной конфигурации и совместимости с различными системами.

Действия:

  1. Открыть командную строку (терминал (Mac) или Git Bash (Windows)) в папке, где лежит .p12-файл. Или создать папку «Сертификаты» и перенести .p12-файл.

  2. Выполнить следующие команды, заменив <имя_вашего_файла>.p12 на реальное имя вашего файла. Вам будет предложено ввести пароль от контейнера.

  3. Извлечь приватный ключ, клиентский сертификат и цепочку корневых сертификатов Сбербанка. Для каждой команды важно ввести пароль и учесть, что при вводе пароль не отображается.
    Windows:
    winpty openssl pkcs12 ‑in <имя_вашего_файла>.p12 ‑nodes ‑nocerts ‑out private.key
    winpty openssl pkcs12 ‑in <имя_вашего_файла>.p12 ‑clcerts ‑nokeys ‑out client_cert.crt
    winpty openssl pkcs12 ‑in <имя_вашего_файла>.p12 ‑clcerts ‑nokeys ‑out cacerts.cer

    Mac:
    openssl pkcs12 ‑in <имя вашего файла>.p12 ‑nodes ‑nocerts ‑out private.key
    openssl pkcs12 ‑in <имя вашего файла>.p12 ‑clcerts ‑nokeys ‑out client_cert.crt
    openssl pkcs12 ‑in <имя вашего файла>.p12 ‑cacerts ‑nokeys ‑chain ‑out cacerts.cer

    В случае возникновения ошибки смотреть «Настройки вызова API», указать -legacy, например:
    $ winpty openssl pkcs12 -in <имя_вашего_файла>.p12 -legacy -nodes -nocerts -out private.key. После выполнения команды вы получите три файла, которые можно загружать в ваши хранилища:

    private.key — приватный ключ;

    client_cert.crt — клиентский сертификат;

    cacerts.cer — корневые сертификаты SberAPI CA и SberAPI Root CA.

Настройка доверия к новым сертификатам Минцифры

Согласно инструкции «Сертификат Минцифры», важно добавить сертификат УЦ Минцифры в доверенные сертификаты.

Для установки сертификата в Windows и MacOS:

  1. Перейти на страницу «Поддержка работы сайтов с российскими сертификатами» портала «Госуслуги».

  2. Скачать сертификат для вашей ОС.

  3. Установить его по инструкции на сайте «Госуслуги», например, для Windows согласно инструкции «Корневые сертификаты и выпускающие сертификаты».

  4. Запустить браузер без предустановленных российских сертификатов (например, Google Chrome, Mozilla Firefox, Safari) и зайти на страницу sberbank.ru, чтобы убедиться, что сертификаты установлены правильно.

Для Linux инструкция указана на странице «Сертификат Минцифры».

Установка адреса шлюза API

Для наших целей есть шлюз API с адресом mc.api.sberbank.ru, порт по умолчанию 443.

Установка сертификатов в Postman и Insomnia

Установка сертификатов в Postman

Сначала нужно обязательно перейти в «App Settings» по ссылке в правом верхнем углу и на вкладке «General» проверить, что «SSL certificate verification» выключен.

Далее:

  1. Перейти на вкладку «Certificates».

  2. Убедиться, что включён режим «CA certificates» и загружен сертификат от Минцифры.

  3. В разделе «Client certificates» нажать на «Add Certificate…».

  4. Заполнить поля на вкладке «Certificates».

    Host(required): mc.api.sberbank.ru
    Port: 443 
    CRT file: cacerts.cer
    KEY file: private.key
  5. Нажать на «Add» и закрыть окно настроек.

Установка сертификатов в Insomnia

Сначала нужно обязательно перейти в «Preferences» по ссылке в правом верхнем углу и на вкладке «General» в секции «Request/Response» проверить, что включена галочка «Validate certificates».

  1. В секции «Security» на вкладке «General» дать доступ к папке с сертификатами.

Действия:

  1. Создать новую коллекцию.

  2. Нажать на «Add Certificates» слева в верхнем углу для коллекции.

  3. С помощью «Add CA Certificate» в окне «Manage Certificates» добавить сертификат Минцифры.

  4. В секции «Client Certificates» нажать на «Add client certificate».

  5. Заполнить поля в открывшемся окне «Add Client Certificate».

     Host вместе с port: mc.api.sberbank.ru:443 
     Certificate:
     Add certificate file: cacerts.cer
     Add key file: private.key
  6. Нажать на «+Add certificate».

  7. На вкладке «Manage Certificates» нажать на «Done».

  8. Убедиться, что сертификаты добавлены.

Проверка работоспособности через тестовый запрос в Postman и Insomnia

Предусловие: используем демонстрационный API, который подключен в вашем приложении.

Демонстрационный API https://api.developer.sber.ru/product/DEMOJSON:

  1. Доступен для подписки всем организациям на Портале api.developer.sber.ru.

  2. Заключение дополнительного договора не требуется.

  3. Согласно четвёртому шагу «Выполните проверку взаимодействия» взять два CURL‑запроса. Получение токена:

     curl ‑location ‑request POST 'https://mc.api.sberbank.ru:443/prod/tokens/v3/oauth' \
     ‑header 'RqUID: <значение, удовлетворяющее паттерну ^[0–9a‑fA‑F]{32}$>' \
     ‑header 'Authorization: Basic <закодированное в base64 значение client_id:client_secret>' \
     ‑header 'Content‑Type: application/x‑www‑form‑urlencoded' \
     ‑data‑urlencode 'grant_type=client_credentials' \
     ‑data‑urlencode 'scope=auth://demo/json' \
     ‑cert‑type P12 ‑cert {путь до контейнера p12}:{пароль от контейнера} \
     ‑cacert {название файла.pem}

Тестовый бизнес‑запрос:

 curl ‑location ‑request GET 'https://mc.api.sberbank.ru:443/prod/demo/json/v1/connectInfo?paramName=MaH98GFMaH98GFMaH98G' \
 ‑header 'RqUID: <значение, удовлетворяющее паттерну ^[0–9a‑fA‑F]{32}$>' \
 ‑header 'Authorization: Bearer <access_token> ' \
 ‑cert‑type P12 ‑cert {путь до контейнера p12}:{пароль от контейнера} \
 ‑cacert {название файла.pem}

Создание и отправка запросов в Postman

Согласно инструкции Сертификат Минцифры перенести запрос в Postman предварительно создав пространство и коллекцию.

Действия:

  1. Создать в Postman запрос «Получение токена» и «Тестовый бизнес‑запрос».

  2. Скопировать CURL‑запрос для получения токена из предусловия этого этапа и вставить его в адресную строку для URL.

  3. Перейти на вкладку «Headers».

  4. Заполнить ключи:

    • RqUID — уникальный идентификатор сообщения. Обязательный параметр. Тип данных: string. Количество символов: 32. Шаблон: ^[0-9a-fA-F]{32}$. Пример: 0123456789ABCDEF0123456789ABCDEF. Сгенерирововать значение на сайте gen‑uuid‑v4 и указать значение без дефисов.

    • Authorization: Basic <закодированное в base64 значение client_id:client_secret>. Также на сайте conv‑base64 сконвертировать значение с помощью сохранённых значений сlient_id:client_secret.

    Можно авторизоваться и на вкладке «Authorization» в самом запросе или в коллекции, а потом наследовать через «Inherit auth from parent», выбрав «Auth type» как «Basic Auth». Переменные коллекции: в поле «Username» — clientID; в поле «Password» — clientSecret.

    Коллекция:

    Запрос:

  5. Нажать на «Save», затем на «Send» и убедиться, что получен access_token для следующего запроса. Обратите внимание, что "token_type": "bearer" — это способ авторизации для следующего запроса.


    Дополнительно: на вкладке Scripts → Post‑response указать команду для извлечения токена из тела запроса и установки переменной в коллекцию:

    access_token = pm.response.json().access_token; 
    pm.collectionVariables.set(“access_token”, access_token);
  6. Скопировать CURL‑запрос для выполнения Ттестового бизнес‑запроса из предусловия, вставить его в адресную строку для URL, где ключ paramName — простой строковый параметр запроса. Обязательный параметр. Размещение: query params. Допустимые значения: aDF98YTaDF98YTaDF98Y или MaH98GFMaH98GFMaH98G.

  7. Перейти на вкладку «Headers».

  8. Заполнить ключи:

    • RqUID — уникальный идентификатор сообщения. Обязательный параметр. Тип данных: string. Количество символов: 32. Шаблон: ^[0-9a-fA-F]{32}$. Пример: `0123456789ABCDEF0123456789ABCDEF. Взять значение из прошлого запроса на получение токена.

    • Authorization: Bearer <access_token>, где <access_token> получен из прошлого запроса, время жизни которого 60 секунд.

  9. Нажать на «Save», затем на «Send» и убедиться, что получен ответ от сервера со статусом 200 ОК. На даный момент ошибка 500 🙂. Отправлен запрос в техподдержку.

  10. Использовать дополнительно Console для чтения и анализа журналов.

Создание и отправка запросов в Insomnia

Действия:

  1. Создать в Postman запрос «Получение токена» и «Тестовый бизнес‑запрос».

  2. Скопировать CURL‑запрос для получения токена из предусловия этого этапа и вставить его в адресную строку для URL.

  3. Нажать на «Import».

  4. Перейти на вкладку «Headers».

  5. Указать те же самые значения для ключей RqUID и Authorization, как и для в Postman.

  6. Нажать на «Send» и убедиться, что получен "access_token" для следующего запроса. Обратите внимание, что "token_type": "bearer" — это способ авторизации для следующего запроса.

    Дополнительно: на вкладке Scripts → Аfter‑response указать команду для извлечения токена из тела запроса и установки переменной в коллекцию:

    const jsonBody = insomnia.response.json();
    const access_token = jsonBody.access_token;
    insomnia.collectionVariables.set("access_token", access_token);
  7. Скопировать CURL‑запрос для выполнения тестового бизнес‑запроса из предусловия этого этапа и вставить его в адресную строку для URL, затем нажать на «Import».

  8. Перейти на вкладку «Headers».

  9. Заполнить ключи:

    • RqUID — уникальный идентификатор сообщения. Обязательный параметр. Тип данных: string. Количество символов: 32. Шаблон: ^[0–9a‑fA‑F]{32}$. Пример: 0123456789ABCDEF0123456789ABCDEF.

      Взять значение из прошлого запроса на получение токена.

    • Authorization: Bearer <access_token>, где <access_token> получен из прошлого запроса, время жизни которого 60 секунд.

  10. Перейти на вклалку «Auth».

  11. Выбрать способ авторизации «Bearer Token» и заполнить поле «TOKEN». Нажать на «Send».

    Объявление переменной .access_token
    Объявление переменной .access_token
  12. Использовать дополнительно Console для чтения и анализа журналов.

Заключение

В этой инструкции я, опираясь на свой опыт, руководства и полезные источники, описала способ авторизации через mTLS, который может вам пригодиться при выполнении рабочих задач.

Благодарю за прочтение.

С уважением, Надежда Дудник (protestinginfo), главный инженер по тестированию в финтехе и ментор по тестированию ПО.

И желаю достичь своей цели!