Мы интегрируем AWS Cognito в мобильные приложения, чтобы решить одну из самых частых проблем — путаницу между User Pools и Identity Pools. User Pool управляет пользователями и выдаёт JWT, а Identity Pool предоставляет временные IAM credentials для доступа к S3, DynamoDB и другим сервисам. Многие проекты тратят недели на отладку неверной конфигурации. Наш опыт показывает, что правильная архитектура с самого начала экономит 30–50% времени на последующие доработки.
Как AWS Cognito помогает избежать типовых ошибок?
Одна из самых частых ошибок — использование App Client с Client Secret. Мобильные приложения не могут безопасно хранить секрет, поэтому при создании App Client обязательно снимаем галку "Generate client secret". Если секрет уже создан — создаём новый App Client без него. Аутентификация по SRP (Secure Remote Password) решает проблему передачи пароля: пароль никогда не покидает устройство. Hosted UI подходит для быстрого старта и социальных провайдеров, но кастомизация ограничена CSS. SRP даёт нативный UX и максимальную безопасность. Рекомендуем SRP для production-приложений.
Почему стоит использовать Identity Pool вместе с User Pool?
User Pool отвечает за аутентификацию и выдачу JWT-токенов. Identity Pool предоставляет временные IAM credentials для прямого доступа к AWS ресурсам (S3, DynamoDB, Lambda). Без Identity Pool приложение не сможет безопасно работать с AWS сервисами напрямую. Для типового приложения с сотнями тысяч пользователей Identity Pool обязателен.
Проблемы, которые решаем
Token expiry vs refresh — интеграция aws cognito
Access token живёт от 5 минут до 24 часов (настраивается). Refresh token — от 1 до 3650 дней. Amplify автоматически делает refresh, но если refresh token истёк или отозван, Amplify.Auth.fetchAuthSession() вернёт ошибку AuthError.sessionExpired. Нужно поймать и перенаправить на логин. Обрабатывайте ошибку в колбэке, при офлайн-режиме показывайте кэшированные данные.
Кастомные атрибуты и Lambda Triggers
Кастомные атрибуты (custom:role, custom:company_id) включаются в ID Token и доступны в приложении без дополнительных запросов. Lambda Triggers (Pre-sign-up, Post-confirmation, Pre-token-generation) позволяют валидировать email, создавать записи в БД и добавлять claims в JWT на лету. Это уменьшает нагрузку на бэкенд в 2–3 раза.
Ускорение разработки с Amplify SDK
Amplify — высокоуровневая обёртка, которая берёт на себя конфигурацию через amplifyconfiguration.json, хранение токенов (Keychain на iOS, EncryptedSharedPreferences на Android), автоматический refresh access token и Hosted UI (OAuth 2.0 + PKCE).Официальная документация Amplify
Но Amplify тянет много зависимостей. Если нужна только аутентификация, размер приложения может вырасти на 5–10 МБ. В таких случаях используем AWSCognitoIdentityProvider напрямую — низкоуровневый SDK. Это даёт гибкость и уменьшает размер билда.
| Характеристика | Amplify SDK | Low-level SDK |
|---|---|---|
| Размер приложения | +5–10 МБ | ~2 МБ |
| Настройка | автоматическая | ручная |
| Refresh token | встроен | нужно реализовать |
| Hosted UI | да | нет |
| Гибкость | средняя | высокая |
Пример конфигурации Amplify
AmplifyConfiguration: `{"UserAgent": "...", "Version": "1.0"}` (файл `amplifyconfiguration.json` генерируется автоматически).Сравнение User Pool и Identity Pool
| Характеристика | User Pool | Identity Pool |
|---|---|---|
| Назначение | Аутентификация и выдача JWT | Временные ключи доступа к AWS |
| Пример использования | Логин, регистрация, MFA | Доступ к S3, DynamoDB |
| Настройка в SDK | Amplify.Auth | Amplify.Storage |
| Влияние на стоимость | $0.00275 за MAU | Без дополнительной платы |
Как мы это делаем: кейс интеграции TOTP MFA
В одном проекте требовалась аутентификация с TOTP MFA. Настроили User Pool с USER_SRP_AUTH, включили TOTP. На стороне iOS использовали Amplify.Auth.setUpTOTP():
Amplify.Auth.setUpTOTP() { result in switch result { case .success(let totpDetails): let qrCodeURL = totpDetails.getSetupURI(appName: "MyApp", accountName: username) // генерируем QR из qrCodeURL через CIQRCodeGenerator case .failure(let error): print(error) } } После сканирования QR-кода и ввода первого кода MFA активировалась. Для верификации использовали Amplify.Auth.confirmSignIn() с TOTP-кодом. Всего на интеграцию ушло 4 дня.
Процесс работы
- Аналитика — аудит текущей архитектуры, определение необходимости User Pool / Identity Pool, выбор flow (Hosted UI / SRP).
- Проектирование — настройка Cognito User Pool, App Client, Federation, MFA, Lambda Triggers.
- Реализация — интеграция SDK (Amplify или low-level), реализация логина, регистрации, MFA, обновления токенов.
- Тестирование — проверка всех сценариев: успешный вход, истечение токенов, офлайн, смена устройства.
- Деплой — настройка Store Connect / Play Console, подпись кода, TestFlight, Firebase App Distribution.
Что входит в работу
- Документация архитектуры аутентификации
- Настройка Cognito User Pool, Identity Pool, App Client
- Интеграция Amplify или low-level SDK
- Реализация SRP или Hosted UI с PKCE
- Настройка MFA (TOTP или SMS)
- Интеграция социальных провайдеров (Google, Apple, Facebook)
- Lambda Triggers под бизнес-логику
- Настройка device tracking
- Инструкция по поддержке и обучение команды
- 2 недели бесплатного техподдержки после деплоя
Сроки и опыт
Базовая интеграция (SRP + TOTP + social providers + Amplify) — 7–12 рабочих дней. Добавление Identity Pool + IAM roles — плюс 3–5 дней. Lambda Triggers — оцениваем отдельно.
Мы интегрируем Cognito с момента запуска сервиса. Наши сертифицированные AWS-инженеры реализовали аутентификацию для 20+ мобильных приложений в fintech, e-commerce и healthcare. Гарантируем соблюдение App Store Review Guidelines и бесшовную работу с StoreKit 2 / Billing 6.
Закажите интеграцию AWS Cognito уже сегодня — свяжитесь с нами для консультации. Получите консультацию по вашему проекту, чтобы обсудить детали.







