Спецификация: RFC 7523, имя метода private_key_jwt — из OpenID Connect Core §9
Клиент с зарегистрированной парой ключей доказывает свою личность, подписывая короткоживущий JWT, так что общего секрета нет. Versola реализует эту часть RFC (аутентификация клиента, раздел 2.2). Использование JWT как authorization grant (раздел 2.1) не реализовано.
Статус
Реализован частично. Отмечено пунктов: 13 из 15.
Аутентификация клиента
-
client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearerвместе сclient_assertion - Принимается на
/token,/par,/introspectи/revoke(PrivateKeyJwtSpec) -
issиsubдолжны быть равныclient_id;client_id, присланный рядом с assertion, должен совпадать - Подпись проверяется по зарегистрированному JWK Set клиента, алгоритм — из объявленного набора (по умолчанию
ES256,PS256) -
expобязателен и не дальше максимума client assertion тенанта (30–900 с, по умолчанию 300 с) -
jtiобязателен и одноразовый, отслеживается на всех репликах (PrivateKeyJwtSpec) -
iatиnbfдо 60 с в будущем принимаются, дальше — отклоняются (PrivateKeyJwtSpec) -
audна тенантеstandard: issuer или URL endpoint; на тенантеfapi2: ровно issuer, одной строкой (PrivateKeyJwtSpec) - Клиент, зарегистрированный для
private_key_jwt, не может аутентифицироваться секретом, а запрос с двумя методами отклоняется (PrivateKeyJwtSpec) - Клиент без зарегистрированных ключей не может аутентифицироваться assertion
- Ключи для
self_signed_tls_client_authне аутентифицируют assertion - Метод и его алгоритмы объявлены в
token_endpoint_auth_methods_supportedиtoken_endpoint_auth_signing_alg_values_supported - Central может сгенерировать пару ключей при регистрации (
generateJwks,ES256,PS256илиRS256); приватная часть возвращается один раз и не хранится - JWT bearer authorization grant (раздел 2.1,
urn:ietf:params:oauth:grant-type:jwt-bearer) — не реализован -
client_secret_jwt— не реализован
Примечания
- Тот же зарегистрированный набор ключей проверяет подписанные объекты запроса, поэтому объект запроса с
subотклоняется; см. RFC 9101. - Пространство
jtiобщее с объектами запроса:jti, потраченный на одно, нельзя потратить на другое.
Куда смотреть
Профили безопасности объясняют правила aud и срока жизни, которые различаются между профилями.