Интеграция 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 for 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 — оцениваем отдельно по сложности.