Проверить утверждение
Специалист по безопасности сверяет заказы агентов на двух мониторах
Инструмент · бесплатно

Проверьте утверждение KYH в браузере

Вставьте утверждение и ключи провайдера — разберём поля, проверим подпись, срок, уровень и привязку к агенту. Ничего не отправляется на сервер. Нет своего утверждения — нажмите «Сделать тестовое».

Всё считается в вашем браузере (WebCrypto). Тестовое утверждение подписывается одноразовым ключом, который создаётся здесь же и нигде не сохраняется.

Результат

Вставьте утверждение и нажмите «Проверить» — или «Сделать тестовое».

01

Как проверять на сервере

То же самое в коде магазина — несколько строк. Пример на Python с библиотекой PyJWT (лицензия примера — MIT):

import jwt, json, time   # PyJWT >= 2.8
from jwt import PyJWKClient

MY_AUD = "https://shop.example"
NEED = {"H0": 0, "H1": 1, "H2": 2, "H3": 3}

def check_kyh(token: str, provider_jwks: str, agent_jkt: str, need: str = "H2"):
    key = PyJWKClient(provider_jwks).get_signing_key_from_jwt(token).key
    c = jwt.decode(token, key, algorithms=["ES256", "EdDSA"], audience=MY_AUD,
                   options={"require": ["iss", "aud", "iat", "exp", "jti", "sub", "lvl", "mth", "cnf"]})
    if c["cnf"]["jkt"] != agent_jkt:          # ключ, которым подписан запрос агента
        raise ValueError("kyh_wrong_agent")
    if NEED[c["lvl"]] < NEED[need]:
        return {"status": 401, "header": f"KYH-Required: lvl={need}; reason=policy"}
    return {"status": 200, "jti": c["jti"], "lvl": c["lvl"]}

Ключ агента (agent_jkt) берётся из подписи самого запроса (HTTP Message Signatures): магазин проверяет подпись запроса и считает отпечаток ключа по RFC 7638.

Опубликовано 06.11.2026 · обновлено 06.11.2026 · CC BY 4.0 · Markdown