RFC 7523 — аутентификация клиента через JWT — Versola Docs
VersolaVersola/docs
До 1.00.7.1versola.kzGitHub

RFC 7523 — аутентификация клиента через JWT

Аутентификация клиента private_key_jwt подписанными JWT assertion по разделу 2.2 RFC 7523.

Спецификация: 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 и срока жизни, которые различаются между профилями.