Спецификация: 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 необязателен, а когда нет.