Інтеграція AWS Cognito для аутентифікації мобільного додатку

TRUETECH займається розробкою, підтримкою та обслуговуванням мобільних додатків iOS, Android, PWA. Маємо великий досвід та експертизу для публікації мобільних додатків до популярних маркетів Google Play, App Store, Amazon, AppGallery та інші.

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

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

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

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1735 послуг
Інтеграція AWS Cognito для аутентифікації мобільного додатку
Середній
~2-3 дні
Часті запитання

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

Етапи розробки

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

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    792
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    671
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1097
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    969
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    914
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    495

Інтеграція AWS Cognito для аутентифікації мобільного додатку

AWS Cognito — це два різних сервіси під однією дахом: User Pools (управління користувачами, аутентифікація) та Identity Pools (федеративні удостовіреня, тимчасові AWS credentials). Плутанина між ними — джерело більшості архітектурних помилок в проектах.

User Pool потрібен, коли ви хочете зберігати користувачів та видавати JWT-токени. Identity Pool потрібен, коли мобільному додатку потрібні тимчасові IAM credentials для прямого доступу до S3, DynamoDB або інших AWS сервісів. Часто потрібні обидва — User Pool для аутентифікації, Identity Pool для авторизації на AWS ресурси.

Amplify SDK vs aws-mobile-client

До 2020 року стандартним способом була AWSMobileClient. Зараз це legacy — офіційна рекомендація AWS — Amplify Libraries для iOS та Android. Amplify — високоуровневе обгортка, яка бере на себе:

  • Конфігурацію через amplifyconfiguration.json
  • Зберігання токенів (Keychain на iOS, EncryptedSharedPreferences на Android)
  • Автоматичний refresh access token
  • Hosted UI (OAuth 2.0 + PKCE flow через system browser)

Але у Amplify є проблема — він тягне багато залежностей. Якщо вам потрібна тільки аутентифікація без інших Amplify категорій — розмір додатку може вирости на 5–10 МБ. У таких випадках використовуємо AWSCognitoIdentityProvider напрямку (низькоуровневий SDK).

Hosted UI vs SRP

Cognito підтримує два flow:

Hosted UI — браузерний OAuth 2.0 + PKCE через ASWebAuthenticationSession (iOS) / Custom Tabs (Android). Cognito сам рендерить сторінки логіну. Зручно для швидкого старту та social providers (Google, Facebook через Cognito federation). Недолік: кастомізація обмежена CSS, нема нативного UX.

SRP (Secure Remote Password) — аутентифікація без передачи пароля в открому формі. Користувач вводить пароль в нативному UI, SDK виконує математичний протокол SRP з Cognito. Пароль ніколи не передається — тільки обчислені proof values. Це правильний вибір для нативних форм логіну.

Amplify використовує SRP за замовчуванням при виклику Amplify.Auth.signIn(username:password:). Важливо: SRP не працює без включеного USER_SRP_AUTH у налаштуваннях App Client Cognito User Pool.

MFA: TOTP vs SMS

Cognito підтримує обидва варіанти:

  • SMS MFA — відправка коду через SNS. Просто налаштувати, але вимагає IAM роль для SNS та додаткові витрати на SMS.
  • TOTP (Time-based OTP) — Google Authenticator / Authy. Немає витрат на SMS, більш надійно проти SIM swap. Налаштування через Amplify.Auth.setUpTOTP().

При TOTP setup: додаток отримує секретний ключ та QR-код URI (otpauth://totp/...). Відображаємо QR через CIQRCodeGenerator (iOS Core Image) або zxing (Android). Користувач сканує в authenticator app, вводить перший 6-значний код для верифікації.

// iOS — TOTP setup
Amplify.Auth.setUpTOTP() { result in
    switch result {
    case .success(let totpDetails):
        let qrCodeURL = totpDetails.getSetupURI(appName: "MyApp", accountName: username)
        // генеруємо QR з qrCodeURL
    case .failure(let error):
        print(error)
    }
}

Custom Attributes та Lambda Triggers

Cognito User Pool дозволяє додавати кастомні атрибути (custom:role, custom:company_id). Вони включаються в ID Token та доступні у мобільному додатку без додаткових запитів.

Lambda Triggers — потужний інструмент для кастомної логіки:

  • Pre-sign-up: валідація домену email, блокування корпоративних аккаунтів.
  • Post-confirmation: створення запису в базі даних після підтвердження email.
  • Pre-token-generation: додавання кастомних claims в JWT на льоту.

Pre-token-generation особливо корисний: додаємо ролі з DynamoDB прямо в ID Token без додаткових API-вызовів з мобільного клієнта.

Device Tracking

Cognito підтримує deviceKey — при включеному відстеженні пристроїв користувач може дивитися список авторизованих пристроїв та видаляти їх. Amplify SDK автоматично зберігає deviceKey у Keychain/EncryptedSharedPreferences при першому логіні.

Включається у налаштуваннях User Pool → Devices → Always remember або User opt-in. Додає один параметр в auth flow — не впливає на продуктивність.

Типові проблеми

Token expiry vs refresh. Cognito access token живе від 5 хвилин до 24 годин (налаштовується). ID token — той же час. Refresh token — від 1 до 3650 днів. Amplify автоматично робить refresh, але якщо refresh token істек або відозваний — Amplify.Auth.fetchAuthSession() повертає AuthError.sessionExpired. Потрібно поймати та перенаправити на логін.

PKCE та App Client Secret. Мобільні App Clients у Cognito не повинні мати Client Secret — його неможливо безпечно зберігати у додатку. При створенні App Client: знімаємо галку "Generate client secret". Якщо секрет уже створено — створюємо новий App Client без нього.

Термін

Базова інтеграція (SRP auth + TOTP MFA + social providers + Amplify) — 7–12 робочих днів. Додавання Identity Pool + IAM roles для прямого доступу до S3/DynamoDB — плюс 3–5 днів. Lambda Triggers з custom business logic — оцінюємо окремо по складності.