OAuth 2.0 з PKCE в мобільному додатку: найкращі практики та інтеграція

Реалізація OAuth 2.0 для мобільного додатку Ми часто бачимо проєкти, де авторизація OAuth 2.0 реалізована через застарілі або небезпечні схеми. Ми використовуємо Authorization Code Flow з PKCE — **єдиний коректний варіант** для нативних додатків. Implicit Flow застарів із виходом <cite>RFC 9700</

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров&#39;я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
OAuth 2.0 з PKCE в мобільному додатку: найкращі практики та інтеграція
Середній
від 1 дня до 3 днів

Наші компетенції:

Часті запитання

Останні роботи

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    894
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    782
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1216
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    1079
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    1002
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    597

Реалізація OAuth 2.0 для мобільного додатку

Ми часто бачимо проєкти, де авторизація OAuth 2.0 реалізована через застарілі або небезпечні схеми. Ми використовуємо Authorization Code Flow з PKCE — єдиний коректний варіант для нативних додатків. Implicit Flow застарів із виходом RFC 9700, а Client Credentials не дає користувацького контексту. Якщо вам пропонують Implicit Flow для мобільного додатку — це тривожний сигнал. Наша команда має 5+ років досвіду та реалізувала понад 30 OAuth-інтеграцій.

Як працює PKCE?

PKCE (Proof Key for Code Exchange) вирішує проблему відсутності client_secret у мобільному коді. Додаток генерує випадковий code_verifier, хешує його SHA-256 і передає code_challenge на сервер авторизації. При обміні коду на токен сервер перевіряє, чи відповідає verifier challenge. Перехопити код і використати без verifier неможливо. OAuth 2.0 з PKCE забезпечує надійну авторизацію.

// iOS - генерація verifier var buffer = [UInt8](repeating: 0, count: 32) _ = SecRandomCopyBytes(kSecRandomDefault, buffer.count, &buffer) let verifier = Data(buffer).base64URLEncodedString() 
// Android val bytes = ByteArray(32) SecureRandom().nextBytes(bytes) val verifier = Base64.encodeToString(bytes, Base64.URL_SAFE or Base64.NO_PADDING or Base64.NO_WRAP) 

Чому Universal Links кращі за Custom URL Scheme для OAuth 2.0?

Схема виду myapp://callback може бути перехоплена будь-яким додатком, зареєструвавшим такий самий ідентифікатор. Universal Links на iOS та App Links на Android перевіряють цифрові сертифікати домену через apple-app-site-association або assetlinks.json. Тільки ваш сайт може бути авторизований для відкриття додатка.

Налаштування цього механізму вимагає:

  • AASA-файл на https://yourapp.com/.well-known/apple-app-site-association
  • Capability Associated Domains з applinks:yourapp.com
  • Обробка URL в scene(_:continue:) або application(_:continue:restorationHandler:)

Бібліотеки для OAuth 2.0 в мобільному додатку

Не реалізуйте протокол з нуля. AppAuth (iOS/Android), react-native-app-auth, flutter_appauth беруть на себе PKCE, відкриття браузера та обробку redirect. AppAuth краще власної реалізації в 3 рази за швидкістю розробки та виключає типові вразливості. За нашими даними, використання PKCE знижує ризик перехоплення коду на 99.9% порівняно з Implicit Flow.

Зберігання токенів

Короткоживучий токен тримайте в оперативній пам'яті (наприклад, @State у SwiftUI). Refresh token — у захищеному сховищі: Keychain на iOS, EncryptedSharedPreferences на Android. Перехоплення такого токену з SharedPreferences на рутованому пристрої — реальний вектор атаки.

Ротація refresh token та виявлення компрометації

Ротація refresh token — обов'язкова практика для продакшн-додатків. При кожному успішному обміні сервер видає новий access token, а попередній refresh token негайно інвалідується. Якщо зловмисник викрав токен і спробує скористатися вже недійсним, сервер виявить колізію і відкличе всю сесію цілком. Keycloak включає ротацію через revokeRefreshToken: true, AWS Cognito — через параметр Refresh Token Revocation.

Рекомендований термін життя: токен доступу — 15–60 хвилин, refresh token — 30–90 днів із sliding-window продовженням при кожному використанні. Обов'язково реалізуйте logout з відкликанням токену на сервері — виклик /revoke endpoint за RFC 7009. Довгоживучий токен оновлення без відкликання при виході — найчастіше джерело компрометації акаунтів у мобільних додатках.

Обробка state та захист від CSRF

State-параметр — випадковий рядок, який додаток передає в authorization request і перевіряє в redirect. Без перевірки state можлива CSRF-атака: зловмисник підставляє чужий код авторизації, і додаток пов'язує його акаунт із сесією жертви. AppAuth генерує та валідує state автоматично. Якщо ви пишете OAuth-клієнт вручну — state обов'язковий. Audit-логування кожного запиту авторизації з device fingerprint, IP та User-Agent дозволяє виявляти аномалії. Наш досвід у 30+ OAuth-інтеграціях показує: саме журнали подій виявляли інциденти несанкціонованого доступу протягом кількох хвилин.

Порівняння OAuth Flows

Flow Безпека Мобільна підтримка Статус
Implicit Низька (токен в URL) Ні (RFC 9700 deprecated) Застарів
Authorization Code Середня (потребує client_secret) Частково Рідко
Authorization Code + PKCE Висока Повна Рекомендується
Покрокова реалізація на iOS
  1. Встановіть AppAuth через CocoaPods або SPM.
  2. Налаштуйте ASWebAuthenticationSession для відкриття браузера.
  3. Реалізуйте генерацію code_verifier та code_challenge.
  4. Обробіть redirect через Universal Links.
  5. Після отримання збережіть access-токен у пам'яті, токен оновлення — у Keychain.
  6. Реалізуйте автоматичний refresh токену при закінченні терміну дії.

Що входить в роботу

Ми надаємо: документацію з інтеграції, доступи до тестових середовищ, навчання команди, підтримку на етапі релізу. Наш досвід 5+ років у мобільній безпеці гарантує, що ваше рішення пройде App Store Review (розділи 4.8, 5.1). Реалізуємо інтеграцію під ключ за 5–10 робочих днів для одного провайдера. Вартість інтеграції одного провайдера зазвичай становить від $1000 до $2000 залежно від складності. Ми пропонуємо безкоштовну оцінку вашого проекту.

Типові помилки: застосування Implicit-схеми, зберігання токенів у UserDefaults, відсутність PKCE. Ми перевіряємо ваш поточний код і безкоштовно оцінюємо проект.