Быстрый старт для разработчика
Подключите лицензируемый клиент к MyHoreca Licensing примерно за час.
1. Продукт и ключ (Console)
- Откройте Vendor Console → Products → создайте продукт.
- Откройте продукт → вкладка Keys → создайте лицензию и выпустите ключ (полный текст показывается один раз).
- По желанию: Product → Policy (матрица FeatureLimits); карточка лицензии — слоты custom data.
- Зафиксируйте Management base URL и tenant из вашего деплоя.
2. Выберите SDK
См. матрицу SDK и справочник SDK.
Типичный поток:
- Соберите идентичность устройства: новый installation key при первом запуске каждой машины — никогда не запекайте private key в golden image (Device Identity).
- Вызовите activate / validate с ключом лицензии (или токеном активации).
- Кэшируйте signed lease; обновляйте по heartbeat / сроку.
- Локально проверьте lease через JWKS (следующий раздел) — ES256, не RSA в бинарнике.
- Применяйте entitlements (и опциональные custom data claims) из проверенного payload — см. Entitlements.
3. Локальная проверка (JWKS)
Не встраивайте RSA public key «как у Cryptolens» как модель доверия. Скачайте / кэшируйте Runtime JWKS, проверьте Compact JWS (MH-LEASE-V1), затем применяйте claims. Полный narrative: Проверка доверия (JWKS).
| Шаг | Действие |
|---|---|
| 1 | Activate / refresh → получите leaseToken (Compact JWS) |
| 2 | SDK загружает JWKS с Runtime (кэш TTL; одно обновление при неизвестном kid; затем fail-closed) |
| 3 | Вызовите helper проверки SDK (VerifyLeaseAsync / verifyLease / …) с expected audience |
| 4 | Только после isAccepted — читайте entitlements / опциональные custom data |
Минимум .NET:
var verified = await client.VerifyLeaseAsync(
leaseToken,
new LeaseVerificationOptions { ExpectedAudience = "myhoreca.runtime" });
if (!verified.IsAccepted) { /* deny features */ }
Минимум TypeScript:
const verified = await client.verifyLease(leaseToken, {
expectedAudience: "myhoreca.runtime",
});
if (!verified.isAccepted) {
/* deny features */
}
Runnable samples уже заканчиваются на verify: матрица SDK → Примеры.
4. Offline и floating (по необходимости)
- Offline request/response и Local Relay: Offline, Local Relay.
- Floating seats: Floating.
- Помните: customer webhooks ≠ sync Relay.