Разграничение доступа к API с помощью Yandex API Gateway

В этой статье рассказываем про поддержку механизмов авторизации в Yandex API Gateway, а также про новую функциональность сервиса — авторизацию с помощью JWT.

Если у компании есть открытый API, через который передаются данные, она рискует безопасностью этих данных. Хакеры изучают открытые API, находят слабые места и взламывают систему. Результатом такой атаки может стать утечка данных пользователей или похищение денег, а иногда компания может полностью потерять контроль над своей IT-системой.

По статистике количество хакерских атак каждые полгода вырастает на 400—600% и растет вместе с числом открытых API. Особенный интерес у злоумышленников к проектам с данными о деньгах пользователей.

Прирост хакерских атак за 2022 год по данным компании Salt

Прирост хакерских атак за 2022 год по данным компании Salt

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

С сервисом Yandex API Gateway это сделать гораздо легче. Он позволяет создать управляемый REST API или HTTP API в соответствии с OpenAPI 3.0, а сам служит своего рода прослойкой между пользователем и нужным ресурсом: авторизация происходит на стороне Yandex API Gateway, а потом пользователи получают доступ к целевому ресурсу. Это помогает защитить API продуктов от злоумышленников.

Способы авторизации с Yandex API Gateway

До недавнего времени Yandex API Gateway предлагал разграничивать доступ только одним способом авторизации — с помощью функции Yandex Cloud Functions. Этот способ позволяет контролировать всю логику реализации авторизации, но код функции клиент создает самостоятельно.

Теперь появилась возможность реализовать авторизацию проще — с помощью JWT (JSON Web Token), безопасного веб-токена с закодированной информацией об идентификации пользователя.

Подходящий способ авторизации зависит от схемы безопасности в вашем сервисе.

Схемы безопасности

Авторизация с Yandex Cloud Functions

Авторизация через JWT

HTTP Basic — в заголовке передается логин и пароль пользователя

HTTP Bearer — в заголовке передается Bearer-токен

Другие HTTP-схемы, определенные RFC 7235 и HTTP Authentication Scheme Registry

API Key — ключ передается в заголовке, строке запроса или файлах cookie

OpenID Connect Discovery — механизм с JWT (JSON Web Token) с закодированной идентификационной информацией пользователя

Oauth 2 — протокол для авторизации, позволяющий сторонним приложениям получить ограниченный доступ к ресурсам HTTP-сервиса

Чтобы реализовать авторизацию в API Gateway, в спецификацию вашего API-шлюза необходимо добавить расширение для выбранного способа авторизации.

Рассмотрим особенности настройки шлюза в Yandex API Gateway.

Авторизация через JWT

Чтобы настроить авторизацию через JWT, нужно добавить в спецификацию расширение x‑yc‑apigateway‑authorizer:jwt, а в самом расширении указать необходимые параметры. Все остальное Yandex API Gateway сделает сам.

При авторизации пользователей API Gateway будет валидировать JWT-токен и проверять его подпись с помощью публичных ключей, указанных в расширении. Также в спецификации расширения он проверит поля токена, его актуальность и наличие прав для необходимого доступа. Если права в токене и в спецификации совпадут, API Gateway предоставит пользователю доступ.

Пример использования и подробная информацию об авторизации через JWT есть в руководстве и в документации сервиса.

Авторизация с помощью функции

Если ваш провайдер не поддерживает протокол OpenID Connect, используйте способ авторизации с помощью функции Yandex Cloud Functions.

Как подключить авторизацию:

  1. Создайте функцию Yandex Cloud Functions.

  2. Настройте API Gateway так, чтобы он вызывал эту функцию перед проксированием запроса в целевой сервис или интеграцию.

  3. Добавьте в спецификацию расширение x-yc-apigateway-authorizer:function.

Пример функции и подробную информацию об авторизации с помощью функции можно найти в документации сервиса.

Кеширование данных авторизации

Оба способа авторизации позволяют хранить данные в локальном кеше.

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

При авторизации с помощью функции Yandex Cloud Functions будет кешироваться ответ функции.

Время хранения данных можно задать в расширении.

Также для каждой авторизации можно передавать контекст — информацию о пользователе и его правах. При авторизации через функцию в контексте также можно прописывать и другие опциональные данные. Если авторизация проходит успешно, контекст будет передаваться в целевую интеграцию — в функцию или serverless-контейнер.

Узнать больше о Yandex API Gateway

Напишите нам

Начать пользоваться Yandex Cloud

Тарифы

Узнать цены и рассчитать стоимость

Мероприятия

Календарь событий Yandex Cloud
Разграничение доступа к API с помощью Yandex API Gateway
Войдите, чтобы сохранить пост