[Из песочницы] Авторизация без авторизации: не собираем персональные данные
В эпоху тотального слива данных интернет-гигантами и уголовного преследования в цифровой среде пользователи боятся оставлять какую-либо информацию о себе. Тем более, если речь идет о VPN-сервисе, где вводить свои персональные данные пользователь не хочет даже при регистрации, а обеспечивать доступ к сервису на различных платформах нужно быстро и без лишней информации. Мы создавали наш сервис GuruVPN под девизом «народный VPN», поэтому было очень важно сделать максимально простой и анонимный способ установки и верификации пользователей.
В этой статье хотим поделиться нашим опытом реализации системы авторизации пользователя на различных платформах. Это уникальное решение позволило нам не собирать и не хранить персональные данные пользователей. Совсем.
Предыстория
На первом этапе нашей командой было решено, что приложение будет иметь классическую систему авторизации/регистрации: Email или телефон, дабы пользователь мог оформить и оплатить подписку с одного устройства и активировать доступ на всех девайсах.
Выбрали формат, начали писать документацию, но в какой-то момент встал вопрос: как объединить данные подписок в App Store и Google Play, чтобы была возможность синхронизировать их на обеих платформах? Причем сделать это так, чтобы установить общих срок подписки, да к тому же на выходе система не противоречила нашему позиционированию «не собирать данные о пользователе».
Поэтому мы начали разрабатывать систему, которая соответствовала бы следующим пунктам:
- не собирала и не хранила персональные данные юзеров
- позволила реализовать идею auto-renewable subscription на мультиплатформенной основе
И наша команда нашла уникальный формат — для авторизации на десктопах была разработана специальная система уникальных (временных) токенов.
Авторизация
В чем секрет такого решения?
Пользователю нужно установить приложение на свой смартфон, безопасно и быстро оплатить подписку, и с помощью QR-кода в одно действие авторизовать подписку. Без учетных данных, логина и повторной покупки доступа.
Как это работает у пользователя
- После загрузки программы появится экран авторизации, в котором отображается QR-код.
- Загружаешь и запускаешь мобильное приложение из App Store/Google Play с in-app подпиской
- Сканируешь или вводишь код авторизации в мобильном приложении
- После успешной авторизации ждешь загрузки экрана управления соединением
- Выбрать страну для подключения и нажимаешь «Подключить»
- После получения разрешений произойдет VPN-соединения будет установлено
Как это работает в действительности
- При первичной авторизации десктопное приложение запрашивает временный токен;
- В базе автоматически генерируется временный токен и отдаётся декстопному приложению. Для максимальной безопасности данных время жизни нашего токена — 15 минут;
- Десктопное приложение выводит на главный экран QR-код и токен в открытом виде для мобильного приложения;
- Мобильное приложение сканирует QR-код и распознает введенный вручную пользователем код и отправляет его в API-запрос на генерацию подтверждения устройства юзера;
- Десктопное приложение запрашивает разрешение у сервера юзера, к которому привязан токен, если привязка существует — API без проблем отдает id и токен для авт
оризации.
Таким образом, удалось реализовать очень простую, а самое главное анонимную схему авторизации пользователя в системе, которая позволяет без лишних шагов обеспечить доступ к приложению на различных платформах при единой подписке.
Как это работает в магазине мобильных приложений. Например, в App Store
На самом процессе внедрения in-app покупок подробно останавливаться не будем, на Хабре о ней уже много писали.
На первом этапе происходит проверка квитанции и статуса подписки на сервере, проверяются параметры запроса. При успешной проверке в приложение возвращается статус подписки и токен сессии.
После валидации чека запускается алгоритм:
Результат
Процесс авторизации проходит очень просто и быстро: в среднем установка и авторизация приложения на десктопе занимают всего пару минут и требуют от пользователя минимальных усилий. В проекте, как и планировали, получилось реализовать систему встроенных покупок в кроссплатформенном формате, при этом сохранив полную анонимность данных пользователей, что для VPN-сервиса является очень важным фактом. И что важно, мы смогли реализовать процесс таким образом, чтобы он полностью соответствовал духу проекта — «приложение для народа».