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# генерується таким чином:
Як показано нижче:
Посилання:
Вхід за гіперпосиланням видно.
Вхід за гіперпосиланням видно. |