Как начать работать с Marketplace License Manager SaaS API
В этом разделе вы узнаете, как интегрировать SaaS-продукт c Yandex Cloud Marketplace License Manager SaaS API.
Схема взаимодействия с API
На схеме:
- Пользователь приобретает подписку на SaaS-продукт в Marketplace.
- Marketplace передает пользователю ссылку на SaaS-продукт. URL-параметр
tokenв передаваемой ссылке содержит JWT-токен.
Адрес для перехода задается при создании версии продукта в Marketplace в поле Ссылка на лендинг. - Пользователь переходит по ссылке, в результате SaaS-продукту передается JWT-токен.
- Первый вариант аутентификации: у пользователя уже есть учетная запись в SaaS-продукте. В этом случае он вводит свои учетные данные и входит в систему.
- Второй вариант аутентификации: у пользователя нет учетной записи в SaaS-продукте. В этом случае он создает новую учетную запись и входит в систему.
- SaaS-продукт отправляет в Marketplace запрос
ProductInstanceService.Claim, содержащий полученный от пользователя токен и идентификатор ресурса в SaaS-продукте. - В результате Marketplace привязывает подписку к ресурсу и возвращает SaaS-продукту привязку (объект
Lock). - SaaS-продукт сохраняет полученную привязку и начинает предоставлять доступ к ресурсу.
- SaaS-продукт периодически запрашивает привязку в Marketplace.
- Marketplace возвращает SaaS-продукту привязку до тех пор, пока подписка активна.
Перед началом работы
Чтобы начать работать c Marketplace License Manager SaaS API:
- Станьте партнером Marketplace и зарегистрируйте аккаунт юридического лица.
- В кабинете партнера
создайте продукт и тариф с типом Subscription. - Создайте сервисный аккаунт, от имени которого вы будете аутентифицироваться в API.
- Назначьте сервисному аккаунту роли
license-manager.saasSubscriptionSupervisorиmarketplace.productInstances.saasSupervisorна профиль партнера или на отдельный продукт. - Получите IAM-токен для сервисного аккаунта, от имени которого вы будете аутентифицироваться в License Manager API.
Чтобы воспользоваться примерами, установите утилиты cURL
Настройте интеграцию с API
Чтобы реализовать бизнес-логику продукта, самостоятельно доработайте код вашего приложения, настроив интеграцию с License Manager SaaS API и Product Instance Manager API для проверки статуса и типа подписок:
-
Аутентифицируйтесь в License Manager SaaS API и Product Instance Manager API от имени сервисного аккаунта. Для аутентификации используйте IAM-токен.
-
Создайте страницу, на которую нужно перенаправить пользователя во время привязки купленной им подписки к сервису. На этой странице пользователь должен будет аутентифицироваться.
При перенаправлении пользователя на такую страницу в строке запроса в параметре
tokenпередается JWT-токен (token), сгенерированный Yandex Cloud. JWT-токен действует 15 минут и содержит:- идентификатор подписки, которую купил пользователь (
license_instance_id); - идентификатор шаблона подписки, который вы создали в кабинете партнера (
license_template_id); - идентификатор запущенного экземпляра продукта пользователя (
product_instance_id).
- идентификатор подписки, которую купил пользователь (
-
Пока действует JWT-токен, на созданной странице авторизуйте пользователя и сохраните уникальный идентификатор экземпляра запущенного продукта (
product_instance_id). -
Привяжите уникальный идентификатор экземпляра продукта пользователя (
product_instance_id) к купленной пользователем подписке (license_instance_id).Привязать идентификатор к подписке можно с помощью метода REST API Claim для ресурса ProductInstance или вызова gRPC API ProductService/Claim.
Передайте в запросе:
- JWT-токен (
token); - (опционально) уникальный идентификатор пользователя в вашей системе (
resource_id); - (опционально) дополнительные метаданные (
resource_info).
В ответе вы получите идентификатор привязки (
lock_id) — он находится в параметреmetadata. Если в ответе ошибка, значит, подписка не привязалась к сервису и нужно попросить пользователя заново пройти все шаги. - JWT-токен (
-
Организуйте периодическую проверку того, что привязка подписки активна. Используйте для этого идентификатор привязки (
lock_id), полученный на предыдущем шаге.Получить актуальную информацию о привязке подписки можно с помощью:
-
метода REST API get для ресурса Lock или вызова gRPC API LockService/Get.
В ответе должен возвращаться активный ресурс Lock, для которого
state = LOCKED, а время окончания действия подпискиend_timeнаходится в будущем. -
метода REST API getByResourceID для ресурса Lock или вызова gRPC API LockService/Get.
При успешном ответе должен возвращаться активный ресурс Lock, иначе — ошибка
NOT_FOUND.
Примечание
Учитывайте, что пользователь может отвязать одну подписку от сервиса и привязать к нему другую. Ваш код должен корректно обрабатывать такие случаи.
-
-
Организуйте бизнес-логику обработки подписок: учет потребления, ограничения по времени, количеству пользователей и т.п.
Получите информацию о привязке
Чтобы получить информацию о привязке, воспользуйтесь методом REST API Get для ресурса Lock или вызовом gRPC API LockService/get:
curl \
--request GET \
--url 'https://marketplace.api.yandexcloud.kz/marketplace/license-manager/saas/v1/locks/<идентификатор_привязки>' \
--header 'Authorization: Bearer <IAM-токен>' \
--header 'Content-Type: application/json'
Где <идентификатор_привязки> — значение поля lockId.
grpcurl \
-rpc-header "Authorization: Bearer <IAM-токен>" \
-d '{
"lockId": "<идентификатор_привязки>"
}' \
marketplace.api.yandexcloud.kz:443 yandex.cloud.marketplace.licensemanager.saas.v1.LockService/Get
Где lockId — значение поля lockId, полученное на предыдущем шаге.
В результате Marketplace вернет привязку (объект Lock), если подписка активна и привязана к экземпляру продукта пользователя.
Отследите продление подписки
Чтобы отслеживать продление подписки, необходимо контролировать изменение значения поля end_time в экземпляре подписки.
Чтобы получить данные об экземпляре подписки, воспользуйтесь методом REST API Get для ресурса Instance или вызовом gRPC API InstanceService/Get:
curl \
--request GET \
--url 'https://marketplace.api.yandexcloud.kz/marketplace/license-manager/saas/v1/instances/<идентификатор_экземпляра>' \
--header 'Authorization: Bearer <IAM-токен>'
Где <идентификатор_экземпляра> — идентификатор экземпляра подписки.
grpcurl \
-rpc-header "Authorization: Bearer <IAM-токен>" \
-d '{
"instanceId": "<идентификатор_экземпляра>"
}' \
marketplace.api.yandexcloud.kz:443 yandex.cloud.marketplace.licensemanager.saas.v1.InstanceService/Get
Где instanceId — идентификатор экземпляра подписки.