[Из песочницы] Авторизация без авторизации: не собираем персональные данные

В эпоху тотального слива данных интернет-гигантами и уголовного преследования в цифровой среде пользователи боятся оставлять какую-либо информацию о себе. Тем более, если речь идет о VPN-сервисе, где вводить свои персональные данные пользователь не хочет даже при регистрации, а обеспечивать доступ к сервису на различных платформах нужно быстро и без лишней информации. Мы создавали наш сервис GuruVPN под девизом «народный VPN», поэтому было очень важно сделать максимально простой и анонимный способ установки и верификации пользователей.

1oywyf7gepkhxw5v33eyabyxzpw.jpeg

В этой статье хотим поделиться нашим опытом реализации системы авторизации пользователя на различных платформах. Это уникальное решение позволило нам не собирать и не хранить персональные данные пользователей. Совсем.

Предыстория


На первом этапе нашей командой было решено, что приложение будет иметь классическую систему авторизации/регистрации: Email или телефон, дабы пользователь мог оформить и оплатить подписку с одного устройства и активировать доступ на всех девайсах.

Выбрали формат, начали писать документацию, но в какой-то момент встал вопрос: как объединить данные подписок в App Store и Google Play, чтобы была возможность синхронизировать их на обеих платформах? Причем сделать это так, чтобы установить общих срок подписки, да к тому же на выходе система не противоречила нашему позиционированию «не собирать данные о пользователе».

Поэтому мы начали разрабатывать систему, которая соответствовала бы следующим пунктам:

  • не собирала и не хранила персональные данные юзеров
  • позволила реализовать идею auto-renewable subscription на мультиплатформенной основе


И наша команда нашла уникальный формат — для авторизации на десктопах была разработана специальная система уникальных (временных) токенов.

Авторизация


В чем секрет такого решения?

Пользователю нужно установить приложение на свой смартфон, безопасно и быстро оплатить подписку, и с помощью QR-кода в одно действие авторизовать подписку. Без учетных данных, логина и повторной покупки доступа.

Как это работает у пользователя


  • После загрузки программы появится экран авторизации, в котором отображается QR-код.
  • Загружаешь и запускаешь мобильное приложение из App Store/Google Play с in-app подпиской
  • Сканируешь или вводишь код авторизации в мобильном приложении
  • После успешной авторизации ждешь загрузки экрана управления соединением
  • Выбрать страну для подключения и нажимаешь «Подключить»
  • После получения разрешений произойдет VPN-соединения будет установлено


Как это работает в действительности


l-yqbmpp3clsdach5ailhmrs7zk.png


  1. При первичной авторизации десктопное приложение запрашивает временный токен;
  2. В базе автоматически генерируется временный токен и отдаётся декстопному приложению. Для максимальной безопасности данных время жизни нашего токена — 15 минут;
  3. Десктопное приложение выводит на главный экран QR-код и токен в открытом виде для мобильного приложения;
  4. Мобильное приложение сканирует QR-код и распознает введенный вручную пользователем код и отправляет его в API-запрос на генерацию подтверждения устройства юзера;
  5. Десктопное приложение запрашивает разрешение у сервера юзера, к которому привязан токен, если привязка существует — API без проблем отдает id и токен для авт
    оризации.


Таким образом, удалось реализовать очень простую, а самое главное анонимную схему авторизации пользователя в системе, которая позволяет без лишних шагов обеспечить доступ к приложению на различных платформах при единой подписке.

Как это работает в магазине мобильных приложений. Например, в App Store


На самом процессе внедрения in-app покупок подробно останавливаться не будем, на Хабре о ней уже много писали.

На первом этапе происходит проверка квитанции и статуса подписки на сервере, проверяются параметры запроса. При успешной проверке в приложение возвращается статус подписки и токен сессии.

После валидации чека запускается алгоритм:

uwcbzd6olr9vm_4adprmvglzeei.jpeg

Результат


Процесс авторизации проходит очень просто и быстро: в среднем установка и авторизация приложения на десктопе занимают всего пару минут и требуют от пользователя минимальных усилий. В проекте, как и планировали, получилось реализовать систему встроенных покупок в кроссплатформенном формате, при этом сохранив полную анонимность данных пользователей, что для VPN-сервиса является очень важным фактом. И что важно, мы смогли реализовать процесс таким образом, чтобы он полностью соответствовал духу проекта — «приложение для народа».

© Habrahabr.ru