JWT-авторизация для API без кода: шаблон выдачи и проверки токенов

JWT-авторизация для API без кода начинается в nana800 с готового шаблона из двух частей: первый вебхук выдаёт подписанный токен, второй проверяет токен из запроса и отвечает результатом. Свой сервер и библиотеки не нужны, токены подписываются алгоритмом HS512 вашим секретным ключом. Баланс каждый месяц бесплатно пополняется до 350 ₽, карта для старта не нужна.

Собрать в конструкторе
Схема шаблона «Выдача и проверка JWT (Jwt Token Auth)» в конструкторе nana800

Цепочка блоков

  1. 1

    Триггер

    «button» запускает выдачу токена вручную, без запроса: так удобно проверить настройки блока «sign jwt». Кнопка бесплатная.

  2. 2

    Триггер · Вебхук (триггер)

    «webhook» для выдачи принимает запрос на токен. В шаблоне у него метод GET и путь «/», задайте свой путь, например /token.

  3. 3

    Действие · Выпуск JWT-токена

    «sign jwt» подписывает токен алгоритмом HS512. Секретный ключ, владельца токена (sub), данные внутри токена и срок жизни заполняете вы. Блок возвращает token и время окончания expires_at.

  4. 4

    Действие · Ответ на вебхук

    «webhook response» возвращает отправителю выданный токен. Тело ответа в шаблоне пустое: впишите в body json объект с токеном.

  5. 5

    Триггер · Вебхук (триггер)

    «webhook» для проверки принимает запрос с токеном. У него тоже метод GET и путь «/», поэтому ему нужен свой путь, например /verify, иначе запросы до него не дойдут.

  6. 6

    Действие · Проверка JWT-токена

    «validate jwt» проверяет подпись и срок действия токена тем же секретным ключом. Возвращает valid (true или false), данные из токена в payload и причину отказа в error_text.

  7. 7

    Действие · Ответ на вебхук

    «webhook response» отвечает результатом проверки. Тело ответа тоже пустое: верните в нём valid и payload из блока проверки.

Для каких задач подходит

  • Вход в мобильное приложение или личный кабинет: после проверки логина выдать токен и дальше пускать только с ним
  • Закрыть свой API на вебхуках nana800 от чужих запросов
  • Временный доступ для партнёра или подрядчика на неделю или месяц
  • Проверка токенов, которые ваш сервер подписал алгоритмом HS512 тем же ключом
  • Передача id пользователя и его роли между системами внутри подписанного токена

Как настроить

  1. 1

    Создайте схему из шаблона

    В конструкторе откройте «Готовые решения», найдите шаблон «Jwt Token Auth» и нажмите «Использовать». Выберите проект и схему и нажмите «Создать»: появятся обе части, выдача и проверка токена. Токен - это подписанная строка, которую приложение прикладывает к запросам вместо логина и пароля.

  2. 2

    Разведите адреса вебхуков

    В первом блоке «webhook» выберите метод POST и путь /token, во втором - POST и путь /verify. В шаблоне у обоих стоит путь «/», и пока пути одинаковые, второй вебхук не получает запросов.

  3. 3

    Настройте выдачу токена

    В блоке «sign jwt» вставьте секретный ключ: длинную случайную строку не короче 32 символов. В поле владельца (sub) подставьте id пользователя из тела запроса, срок жизни задайте, например 7d. В следующем блоке ответа впишите в body json объект с полем token и подставьте в него token из блока «sign jwt».

  4. 4

    Настройте проверку токена

    В блоке «validate jwt» в поле jwt token подставьте токен из запроса, например поле token из тела, а в поле jwt secret вставьте тот же ключ, что в «sign jwt». В последнем блоке ответа верните valid и payload из блока проверки.

  5. 5

    Включите схему и проверьте

    Включите схему, затем нажмите кнопку в триггере «button» и посмотрите токен в результате блока «sign jwt» в истории запусков. Блок ответа покажет ошибку: ответ некому отправить, так и должно быть. Потом нажмите «API» в конструкторе, во вкладке «Попробовать» запросите токен и отправьте его на /verify. Пока схема включена, она стоит 0,42 ₽ в час.

Сервисы в шаблоне

  • Вебхук

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

  • JWT

    Выпускайте и проверяйте JWT-токены без кода: вход в свой API, срок жизни токена и свои данные внутри. Бесплатный баланс каждый месяц, карта не нужна.

Частые вопросы

Выдача токена - два запуска базового блока: вебхук и «sign jwt». Проверка - тоже два: вебхук и «validate jwt». Ответы бесплатные, 1000 запусков базового блока стоят 100 ₽. Включённая схема стоит 0,42 ₽ в час. Баланс каждый месяц бесплатно пополняется до 350 ₽, карта не нужна. Если схема включена круглосуточно весь месяц, большая часть этой суммы уходит на часы её работы.

Нет. В шаблоне токен получает любой, кто обратился к адресу выдачи. Перед блоком «sign jwt» добавьте проверку: найдите пользователя в своей базе данных блоком для PostgreSQL, MySQL, MongoDB или встроенной базы nana800 и пропускайте дальше только совпадение бесплатным блоком «condition».

Блок «validate jwt» вернёт valid: false и причину в error_text, а схема продолжит работу, и блок ответа ответит с тем кодом, который в нём выбран. Чтобы на плохой токен отвечать кодом 401, поставьте после проверки бесплатный блок «condition» и подключите к двум его выходам два разных блока ответа.

HS512: токен подписывается и проверяется одним общим секретным ключом. Токены с другими алгоритмами, например RS256 с парой ключей, блок «validate jwt» не примет. Ключ держите в секрете: с ним кто угодно сможет выпускать токены, которые пройдут вашу проверку.

Проще всего в поле тела запроса, например token, или в своём заголовке. Если клиент шлёт заголовок Authorization со словом Bearer перед токеном, блоку проверки нужен токен без этого слова: отрежьте его бесплатным блоком «run custom script».

Нет. Содержимое токена может прочитать любой, у кого он есть, подпись защищает только от подделки. Кладите в поле «Данные в токене (JSON)» id пользователя, роль и другие данные, которые не страшно показать.

Соберите первую схему бесплатно

Регистрация бесплатная, карта не нужна. Каждый месяц баланс бесплатно пополняется до 350 ₽, этого хватает примерно на 3 500 запусков простых блоков.

Собрать в конструкторе