Конфигурация и секреты в мобильном приложении
Вопрос
Как вы разводите окружения и обращаетесь с секретами во Flutter-приложении?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
`--dart-define`/`--dart-define-from-file` для адресов и флагов, flavors для идентификаторов и иконок
Всё, что в приложении, считается публичным: обфускация не защищает строки
Секретные операции на сервере, клиент получает временные токены
Хранение токенов пользователя в Keychain/Keystore (`flutter_secure_storage`)
Удалённая конфигурация и feature-флаги для управления без релиза
Что могут спросить следом
- Как защитить API от запросов не из вашего приложения?
- Где хранить refresh-токен?
Разбор
Образцовый ответ: «Адреса API, ключи аналитики и флаги передаю через --dart-define-from-file, у каждого окружения свой JSON, а идентификатор приложения, имя и иконку разводят flavors. Важный принцип: всё, что попало в приложение, публично. Обфускация переименовывает символы, но строки остаются, их можно вытащить. Поэтому приватные ключи, например платёжного провайдера, живут только на сервере, а приложение получает от него короткоживущие токены. Токены пользователя храню в Keychain и Keystore через flutter_secure_storage, а не в SharedPreferences. Чтобы менять поведение без релиза, использую удалённую конфигурацию и feature-флаги. Для защиты API от чужих клиентов есть проверки целостности приложения, например Play Integrity и App Attest, но они не заменяют авторизацию»
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.