OAuth 2.0 предлагает несколько режимов авторизации, среди которых наиболее распространённым и безопасным является Authorization Code Grant. code_challenge — это функция с повышением безопасности в этом режиме, в основном используемая для механизма PKCE (Proof Key for Code Exchange).
Что такое PKCE?
PKCE (Proof Key for Code Exchange) — это расширение, разработанное для повышения безопасности шаблона авторизационного кода OAuth 2.0, особенно при использовании в публичных клиентах, таких как JavaScript-приложения или мобильные приложения, работающие в браузерах. PKCE предотвращает перехват и неправильное использование авторизационных кодов за счёт добавления дополнительного этапа аутентификации к запросам авторизации.
code_challenge Роль
code_challenge является частью механизма PKCE, генерируемого и отправляемого на этапе запроса авторизации. Он основан на секретном значении (называемом code_verifier), преобразованном алгоритмом хеширования, таким как S256. Цель code_challenge — предоставить базу валидации для последующих запросов токенов без прямого раскрытия code_verifier.
Генерация и использование code_challenge и code_verifier
Поколение code_verifier: code_verifier — это строка с высокой энтропией, случайно сгенерированная,Длина символа (от 43 до 128). Значение по умолчанию — 43。
Поколение code_challenge: Используя code_verifier, code_challenge генерируется с помощью алгоритма хеширования (например, S256). Для S256 code_challenge — это кодировка URL Base64 для хеш-значения code_verifier SHA-256, но символ заполнения = из кодировки должен быть удалён, а длина выхода должна составлять 43 символа (поскольку после кодировки URL Base64 каждые 4 символа представляют 3 байта, но последний блок символов может быть менее 4, поэтому длина может немного изменяться после удаления = символов).
Используйте code_challenge в запросах на авторизацию: При запуске запроса авторизации code_challenge отправляется как один из параметров запроса на сервер авторизации.
Использование code_verifier в запросах токенов: Когда сервер авторизации возвращает код авторизации, клиент использует этот код вместе с ранее сгенерированным code_verifier для запроса доступа к токене. Сервер авторизации проверяет, совпадают ли code_challenge и code_verifier, гарантируя, что запрос инициирован исходным клиентом.
Генерация PKCE
Онлайн-инструменты генерации PKCE:Вход по гиперссылке виден.
Код на C# генерируется следующим образом:
Как показано ниже:
Ссылка:
Вход по гиперссылке виден.
Вход по гиперссылке виден. |