Keys & metadata — Versola Docs
/docs
До 1.00.7.5versola.ioGitHub

Keys & metadata

Справочник по странице Keys & metadata консоли администратора — JWKS, который публикует Versola, генерация, добавление и удаление ключей подписи, переопределения метаданных сервера

Страница Keys & metadata управляет публичной конфигурацией, которую Versola отдает наружу: набором ключей JSON Web Key Set (JWKS), по которому клиенты и API проверяют ваши токены, и переопределениями документа метаданных сервера. Здесь можно сгенерировать ключ подписи, опубликовать ключ, который вы храните в другом месте, или вывести из обращения старый. Ключ подписывает токены тенанта только после того, как вы выберете его как Signing key в Tokens & keys на странице Security.

Перед началом

Что нужноРазрешение
Видеть ключи и переопределения метаданныхjwks:read
Генерировать, добавлять, менять и удалять ключи, менять переопределенияjwks:manage
Видеть, какие тенанты используют ключtenants:read

Страница глобальная и не зависит от выбора тенанта. Без jwks:manage кнопок Generate key и Add key (paste JWK), кнопок Edit и действий удаления нет. Без tenants:read колонку Used by и карточку Used by tenants заполнить нельзя, вместо них показана заметка.

Keys & metadata: таблица ключей и переопределения метаданных сервера
Страница Keys & metadata: кнопки Add key (paste JWK) и Generate key, фильтры All, Can sign и Verify only, таблица из трех ключей с колонками типа, алгоритма, назначения и использования и карточка Server metadata overrides ниже.

Keys

В таблице одна строка на ключ, колонки Key ID (kid), Type (например, EC · P-256), Algorithm, Usage и Used by (сколько тенантов подписывают этим ключом). Фильтры All, Can sign и Verify only сужают таблицу. В меню строки есть Open, Copy key ID и Delete key. Баннер над таблицей описывает следствие генерации ключа: он публикуется для проверки сразу, но ничего не подписывает, пока тенант не выберет его.

Бейдж Usage показывает, что Versola может делать с ключом:

БейджЗначение
Can signCentral хранит закрытую часть, и у ключа известен alg. Тенант может выбрать его как ключ подписи.
Verify onlyУ Central только публичный JWK. Ключ опубликован, чтобы проверяющие его принимали, но им ничего не подписывают.

Развертывание, засеянное из bootstrap.jwks, начинает с ключей «только для проверки», потому что Central никогда не получает их закрытых частей. Сгенерируйте ключ, чтобы получить тот, которым можно подписывать.

Панель ключа

Ключ в боковой панели
Боковая панель ключа central-es256: карточка Used by tenants с тенантом, который им подписывает, карточка Public key с JWK и кнопкой Copy JWK и карточка Fixed.

Выбор строки открывает панель:

  • Used by tenants — тенанты, у которых этот ключ выбран ключом подписи, каждый ссылкой на тенант. Ключ тенанта меняется в Security › Tokens & keys.
  • Public key — JWK в том виде, в каком он опубликован, с кнопкой Copy JWK. Edit открывает JWK для редактирования.
  • Fixed — ID ключа и алгоритм (берется из JWK). kid изменить нельзя: удалите ключ и добавьте новый.
  • Delete key после подтверждения: проверяющие перестают доверять ключу при следующей синхронизации, а токены, подписанные им, перестают проходить проверку.

Central отказывается удалять ключ, которым еще подписывает тенант, с текстом Key '<kid>' is the signing key of <tenants>. Select another key for them before deleting it. Консоль заранее делает действия удаления неактивными и пишет Still selected by N tenants. Move them to another key first. После удаления ключ больше не публикуется, поэтому токены, подписанные им, проверить уже нельзя.

Generate key

Generate key открывает панель с выбором алгоритма, создает пару ключей, сразу публикует публичную часть, а закрытую хранит в Central в зашифрованном виде. Закрытый ключ не показывается и не скачивается.

Generate key
Панель Generate key с тремя вариантами алгоритма: ES256 (recommended), PS256 и RS256, у каждого короткое пояснение.
АлгоритмКакой ключ создаетсяПримечания
ES256 (recommended)EC, кривая P-256Допустим в любом профиле безопасности.
PS256RSA-2048Допустим в любом профиле безопасности. Новый тенант выбирает ключ PS256 раньше ES256, если есть оба.
RS256RSA-2048Можно сгенерировать в любом развертывании, но выбрать для подписи — только у тенанта с профилем безопасности Standard. На тенанте FAPI 2.0 Central его отклоняет.

HS256 не предлагается: у общего секрета нет публичной части для JWKS. kid сгенерированного ключа — метка времени и алгоритм, например 2026-10-14_07-29-17-es256.

Add key (paste JWK)

Add key (paste JWK) открывает панель с полем JWK JSON, куда вставляется публичный JWK. Так публикуют ключ, закрытую часть которого вы храните в другом месте. Консоль требует kid и kty; Central требует kid и в противном случае отвечает JWK must contain a 'kid' field или Invalid JWK JSON. Ключ, добавленный так, всегда Verify only.

Add key (paste JWK)
Панель добавления ключа с полем JWK JSON и подсказкой, что нужны как минимум kty и kid.

Где используются ключи

ПотребительЧто использует
auth, подписьДля каждого тенанта ключ, выбранный как Signing key, подписывает access-токены, ID-токены и logout-токены. Алгоритм берется из ключа. Тенант без выбора подписывает закрытым ключом из конфигурации jwt.private-key сервиса auth (RSA или EC; свежесгенерированное развертывание хранит ключ EC P-256 и публикует только его открытую половину как ES256).
auth, публикацияGET /.well-known/jwks.json возвращает публичные части всех ключей с Cache-Control: public, max-age=86400. Аутентификация не нужна. Resource-серверам стоит перезапрашивать набор при неизвестном kid, а не ждать истечения кэша.
edgeПроверяет токены публичными частями, которые получает синхронизацией из Central. Закрытый ключ он не получает никогда.
CentralПроверяет токены консоли администратора теми же ключами.

Формат набора — RFC 7517. Endpoint Central за этой страницей (/configuration/jwks) описаны в справочнике OpenAPI.

Ротация ключа подписи

Страница поддерживает ротацию в три шага:

  1. Generate key для нужного алгоритма. Новый ключ публикуется, но пока никто им не подписывает.
  2. Откройте Security каждого тенанта и выберите новый ключ как Signing key в Tokens & keys. auth переключится на него после синхронизации ключа; до этого он продолжает подписывать прежним.
  3. Удалите старый ключ, когда не осталось нужных вам токенов, подписанных им. Подождите не меньше, чем живет самый долгий токен, подписанный им, и чем проверяющие кэшируют JWKS (24 часа для ответов auth).

Versola не ротирует ключи по расписанию и не выводит их из обращения за вас.

Перевод существующего развертывания на ES256

Развертывание, сгенерированное versola-cli, с самого начала подписывает ES256. Развертывание, где уже лежит RSA-ключ jwt.private-key, после обновления продолжает подписывать им; само ничего не переезжает. Чтобы перевести его:

  1. Нажмите Generate key и выберите ES256 (или вызовите POST /configuration/jwks/generate?alg=ES256). Ключ публикуется, но пока никто им не подписывает.
  2. Откройте Security каждого тенанта и выберите новый ключ как Signing key в Tokens & keys.
  3. Держите старый ключ опубликованным, пока не истекут токены, выпущенные им, затем удалите его, как в ротации выше.

Тенант, которому нужен PS256 или RS256, выбирает такой ключ так же. RS256 никогда не используется по умолчанию и допускается только на тенанте с профилем Standard.

Server metadata overrides

Под ключами Server metadata overrides показывает в виде JSON члены, которые накладываются на документ метаданных сервера, вычисляемый auth (RFC 8414). Edit открывает Edit server metadata overrides, Save server metadata сохраняет их. Заданный здесь член заменяет вычисленный. Консоль требует issuer, authorization_endpoint, token_endpoint, jwks_uri и response_types_supported и без них не сохраняет. auth отдает документ по /.well-known/openid-configuration и /.well-known/oauth-authorization-server. Член authorization_details_types_supported согласуется с типами, которые вы регистрируете на странице Authorization details. Если переопределений нет, карточка пишет No overrides set.

Что дальше