RFC 7636 — PKCE — Versola Docs
/docs
До 1.00.7.5versola.ioGitHub

RFC 7636 — PKCE

Proof Key for Code Exchange — только S256, обязателен для публичных клиентов и для каждого клиента тенанта fapi2.

Спецификация: RFC 7636

PKCE защищает от перехвата authorization code. Versola поддерживает только метод S256 и требует PKCE для публичных клиентов, для клиентов приложений за edge и для каждого клиента тенанта fapi2.

Статус

Реализован. Отмечено пунктов: 12 из 13.

Code verifier

  • Проверка формата: только символы [A-Za-z0-9._~-]
  • Проверка длины: 43–128 символов (раздел 4.1)
  • Передается при обмене как code_verifier

Code challenge

  • Метод S256: BASE64URL(SHA256(ASCII(code_verifier))) (раздел 4.2)
  • Метод plain — не принимается; отклоняется на /authorize и /par (PushedAuthorizationSpec)
  • Challenge хранится вместе с authorization code и проверяется до того, как code будет израсходован
  • Code, выданный с challenge, обменивается только с подходящим verifier; code, выданный без challenge, — только без него

Authorization request

  • code_challenge — обязателен, с исключением в следующей строке
  • code_challenge обязателен для confidential-клиентов тенанта standard — там он необязателен, потому что client secret уже доказывает, кто обменивает code (публичным клиентам, native-приложениям за edge и каждому клиенту fapi2 он по-прежнему нужен)
  • code_challenge_method — обязателен, когда передан challenge; метод без challenge отклоняется, даже там, где PKCE необязателен
  • Некорректный или отсутствующий challenge дает invalid_request

Token request

  • code_verifier обязателен, если code несет challenge
  • Несовпавший verifier отклоняется с invalid_grant
  • Authorization code одноразовый

Примечания

  • Отсутствие code_challenge_method не означает plain, как предполагал бы RFC: S256 нужно назвать явно.
  • code_challenge_methods_supported объявляет только S256.

Куда смотреть

Профили безопасности показывают, когда PKCE необязателен, а когда нет.