Перейти к основному содержимому

Проверка доверия (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.

Рекомендуемый поток клиента

  1. Вызовите Runtime activate / validate / refresh с ключом лицензии (и идентификатором устройства, если требуется).
  2. Получите подписанный lease (или offline-ответ).
  3. Загрузите материал доверия:
    • Online: скачайте Runtime JWKS, кэшируйте с TTL, при неизвестном kid обновите один раз, затем fail-closed.
    • Offline / air-gap: поставляйте offline trust bundle (только public keys) со сборкой или через операторский пакет.
  4. Проверьте JWS (alg, kid, подпись, typ, срок, audience). Отклоняйте alg=none и неизвестные алгоритмы.
  5. Проверяйте 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
.NETVerifyLeaseAsync
JavaScript / TypeScriptverifyLease
Pythonverify_lease
JavaverifyLease
GoVerifyLease
Rustverify_lease
C++VerifyLease

Каждый публичный SDK Quick Start в examples/ показывает register → activate → validate → refresh → verify.

Чего никогда не должно быть в бинарнике продукта

  • Приватные ключи подписи платформы
  • Session cookies Management / service credentials
  • Сырые HMAC-секреты PSP / webhook

Связанное

Дальше