Сервис ключей
Этот сервис позволяет выпускать 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 для хранения ключей и связанных с ними данных.
Подробнее о том, как проверить требования для каждого сервиса, см. в документе Системные требования.
Что дальше?
-
Узнайте, как установить или обновить сервис:
-
Узнайте больше о программном комплексе 2ГИС: