JWK Set (JSON Web Key Set, JWKS) представляет собой стандартный формат для публикации набора криптографических ключей в виде JSON-документа. В контексте библиотеки Jose в JavaScript он используется как основной механизм распространения публичных ключей, необходимых для проверки подписи JWT (JSON Web Token), JWS (JSON Web Signature) и других объектов семейства JOSE.
Ключевая идея JWKS заключается в разделении ролей:
Такой подход обеспечивает масштабируемость, поддержку ротации ключей и минимизацию риска компрометации.
JWK Set всегда представляет собой JSON-объект с обязательным полем
keys, содержащим массив ключей.
{
"keys": [
{ ... },
{ ... }
]
}
Каждый элемент массива — это отдельный JWK (JSON Web Key), описывающий конкретный криптографический ключ.
Каждый ключ внутри JWKS описывается набором параметров, определяющих его тип, назначение и криптографические свойства.
kty (Key Type) Определяет тип криптографического алгоритма:
RSA — асимметричные RSA ключиEC — эллиптические кривыеoct — симметричные ключиkid (Key ID) Уникальный идентификатор ключа. Используется для выбора правильного ключа при проверке JWT.
use (Public Key Use) Назначение ключа:
sig — подпись (signing)enc — шифрование (encryption)alg (Algorithm) Алгоритм, с которым должен использоваться ключ:
RS256, RS384, RS512ES256, ES384, ES512Для RSA ключей используются дополнительные параметры:
n (modulus) Модуль RSA ключа, закодированный в Base64URL.
e (exponent) Экспонента RSA, обычно
AQAB (65537).
Пример структуры RSA ключа:
{
"kty": "RSA",
"kid": "key-1",
"use": "sig",
"alg": "RS256",
"n": "base64url-modulus",
"e": "AQAB"
}
Для эллиптических кривых используются другие параметры:
crv (Curve) Тип кривой:
P-256P-384P-521x (X coordinate) Координата точки на кривой.
y (Y coordinate) Вторая координата точки.
Пример:
{
"kty": "EC",
"kid": "ec-key-1",
"use": "sig",
"alg": "ES256",
"crv": "P-256",
"x": "base64url-x",
"y": "base64url-y"
}
Для симметричных алгоритмов используется поле:
k (key value) Секретный ключ в Base64URL.
{
"kty": "oct",
"kid": "sym-1",
"use": "sig",
"k": "base64url-secret"
}
В экосистеме Jose JWKS играет центральную роль при валидации токенов:
kidТипичный сценарий:
JWT содержит заголовок:
{
"alg": "RS256",
"kid": "key-1"
}JWKS содержит набор ключей
библиотека Jose сопоставляет kid с нужным
JWK
выполняется проверка подписи
JWKS обеспечивает безопасную ротацию ключей без остановки сервиса.
Механизм:
keyskidЭто позволяет:
В реальных системах JWKS публикуется через HTTP endpoint:
GET /.well-known/jwks.json
Ответ содержит стандартный JSON с массивом ключей.
Библиотека Jose может автоматически загружать и кешировать этот набор.
При работе с JWKS библиотека Jose учитывает:
kidalgДополнительно часто используется кеширование JWKS для снижения нагрузки на сервер авторизации.
Некорректная конфигурация часто приводит к сбоям в верификации:
kid у ключаalg и фактического алгоритма JWTn, e,
x, y, k)kidJWKS напрямую влияет на безопасность всей системы токенов:
Использование JWKS вместо статически заданных ключей в коде снижает риск утечки секретов и упрощает архитектуру распределённых систем аутентификации.