Сервис API-ключей | On-Premise | 2GIS Documentation
On-Premise

Сервис ключей

Этот сервис позволяет выпускать API-ключи и управлять ими через веб-интерфейс администратора. Конечные пользователи сервисов программного комплекса 2ГИС затем используют предоставленные ключи для получения доступа к установленным сервисам.

Администратор выпускает один или несколько API-ключей для партнёра. Это именованная сущность, которая хранит в себе сгруппированный набор API-ключей. Например, вы можете создать отдельных партнёров для команд разработки на Android и на iOS, независимо управляя ключами для обеих команд.

При выпуске API-ключа для него задаётся политика использования. Администратор может:

  • Разрешить доступ к определенному набору сервисов (несколько сервисов, все, ни один).
  • Запретить доступ, основываясь на:
    • Диапазоне IP-адресов (в CIDR-нотации).
    • Значениях следующих HTTP-заголовков:
      • Referer.
      • Origin.
      • User-Agent.

Сервисы программного комплекса 2ГИС, для работы с которыми конечному пользователю необходимы API-ключи:

  • Ведут на своей стороне список выпущенных API-ключей для конечного пользователя, периодически обновляют этот список и связанные политики использования, обращаясь для этого к сервису ключей.
  • Принимают решение о разрешении или блокировке выполнения запросов конечного пользователя, основываясь на всей полученной от сервиса ключей информации.
  • Передают сервису ключей метаданные запросов, которые пытается выполнить пользователь.
Архитектура сервиса ключей

Сервис ключей состоит из двух сервисов: веб-сервиса администратора для выпуска и управления API-ключами и бэкенд-сервиса для взаимодействия с другими сервисами через RESTful API.

Каждый сервис программного комплекса 2ГИС перед выполнением запроса от конечного пользователя отправляет метаданные этого запроса в сервис ключей (включая API-ключ, с которым пришёл запрос). Сервис ключей логирует события, связанные с API-ключами, и хранит эти события в хранилище данных Apache Kafka. Дополнительно ведутся счетчики использования ключей, соответствующие данные хранятся в Redis. Сервис Tasker получает данные о событиях от бэкенда сервиса ключей и выполняет требуемые административные действия над ключами в зависимости от наступивших событий: например, блокирует или разблокирует конкретный API-ключ. Это позволяет сервису ключей контролировать использование API-ключей и управлять доступом, основываясь на квотах: например, можно заблокировать на один час доступ к сервисам карт для определенного API-ключа, если пользователь с этим ключом выполнит более 100 запросов за минуту к сервисам.

Примечание:

Поддержка хранилища данных Apache Kafka находится в стадии разработки и будет добавлена в будущих релизах.

Существующая версия работает без Apache Kafka. Таким образом, нельзя настраивать квоты, так как соответствующие метрики не собираются.

Детали архитектуры программного комплекса 2ГИС приведены в документе Архитектура решения.

Общая инфраструктура:

  • Сервер LDAP для аутентификации пользователей панели администратора. Например, Microsoft Active Directory может выступать в роли сервера LDAP.
  • Хранилище Apache Kafka для событий, связанных с API-ключами.
  • Хранилище Redis для ведения статистики использования ключей.
  • Хранилище PostgreSQL для хранения ключей и связанных с ними данных. Необходимо установить PostgreSQL версии 11.

Детальные требования для каждого сервиса описаны в документе Системные требования.

Что дальше?