Проверка доверия (JWKS)
Как продукт локально проверяет подписанные лицензионные материалы — наш ответ на «вшить RSA, как у Cryptolens».
Два разных секрета
| Материал | Роль | Вшивать в приложение? |
|---|---|---|
Ключ лицензии (v1 XXXX-XXXX-XXXX-XXXX / v2 XXXX-XXXX-XXXX-XXXX-XXXX) | Секрет человека для Runtime activate/validate | Только как config/secret — как пароль |
| Ключи проверки платформы | Публичные ключи для проверки JWS lease / offline-ответов | Да — URL JWKS и/или закреплённый набор public JWK |
Ключ лицензии — не ключ подписи. Подписанные права едут в Compact JWS (MH-LEASE-V1, offline-ответы, …) на ES256 (ECDSA P-256). RSA (RS*) не входит в Crypto Profile v1.
Рекомендуемый поток клиента
- Вызовите Runtime activate / validate / refresh с ключом лицензии (и идентификатором устройства, если требуется).
- Получите подписанный lease (или offline-ответ).
- Загрузите материал доверия:
- Online: скачайте Runtime JWKS, кэшируйте с TTL, при неизвестном
kidобновите один раз, затем fail-closed. - Offline / air-gap: поставляйте offline trust bundle (только public keys) со сборкой или через операторский пакет.
- Online: скачайте Runtime JWKS, кэшируйте с TTL, при неизвестном
- Проверьте JWS (
alg,kid, подпись,typ, срок, audience). Отклоняйтеalg=noneи неизвестные алгоритмы. - Проверяйте claims:
tenantId,licenseId,productId,customerOrganizationId,policySnapshotVersionиpolicySnapshotHashдолжны совпадать с ожидаемым контекстом лицензии. Затем применяйте entitlements, срок и опциональные custom data. Отсутствующий или несовпадающий identity claim означает fail-closed.
SDK уже дают refresh lease + проверку по JWKS — см. матрицу SDK (таблица verify API) и быстрый старт для разработчика (snippets).
Helpers проверки в SDK
| Язык | API |
|---|---|
| .NET | VerifyLeaseAsync |
| JavaScript / TypeScript | verifyLease |
| Python | verify_lease |
| Java | verifyLease |
| Go | VerifyLease |
| Rust | verify_lease |
| C++ | VerifyLease |
Каждый публичный SDK Quick Start в examples/ показывает register → activate → validate → refresh → verify.
Чего никогда не должно быть в бинарнике продукта
- Приватные ключи подписи платформы
- Session cookies Management / service credentials
- Сырые HMAC-секреты PSP / webhook
Связанное
- Ключи лицензий · Offline · Local Relay
- Webhooks (уведомления интегратора — не проверка lease)
- Архитектурный lock: ADR-0027 (внутренние docs платформы)