
Инструмент · бесплатно
Проверьте утверждение 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.