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

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

Предыстория


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

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

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

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

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

Авторизация


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

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

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


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

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



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

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

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


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

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

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



Результат


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

Комментарии (12)


  1. saipr
    11.10.2018 19:28

    Для максимальной безопасности данных время жизни нашего токена — 15 минут;

    Да за это время до канадской границе можно добежать.


    1. le_webr Автор
      12.10.2018 08:38

      Тут прям просится ответ: Все!
      поставить чайник согреться
      мужа накормить
      уроки проверить
      в инете посидеть
      на ответы ответить
      эссе написать
      ответить на смс)))


  1. Sabubu
    11.10.2018 20:46

    У меня предложение установить десктопное, а в добавок еще и мобильное приложение не вызывает особого доверия. Кто его знает, может оно запишет номер телефона, IMEI, имя гуглоаккаунта и хеши всех файлов на SD-карте и отправит товарищу майору. Ну и для надежности еще и нажатия всех клавиш начнет записывать.

    Платить можно криптовалютами или (если есть такая возможность), сделать анонимную систему оплаты через терминалы. А вместо закрытого проприетарного приложения взять тот же OpenVPN.


  1. itconsulting
    11.10.2018 22:05

    Десктопное приложение — это под Windows?


    1. le_webr Автор
      12.10.2018 08:49

      Да, под Винду и под Mac OS


      1. EvgenT
        12.10.2018 12:34

        На моих десктопах — Linux. И что теперь делать?
        Да, я не такой как все.


        1. GDXRepo
          12.10.2018 14:17

          Wine? Если приложение простое, по идее, оно подцепится. Ну, либо виртуалки.


  1. Mobile1
    12.10.2018 07:48

    До конца непонятен такой момент — вам же в любом случае юзер оплачивает что-то с привязанной к апрстору кредитной карты — т.е. по крайней мере апсторы точно знают ФИО человека, оплачивающего именно ваш сервис и еще кучу инфы хранят, которую они выдергивают из устройства — оператора мобильной связи, устройство, страну и т.д.

    Т.е. вы хотите сказать что, например в статистике вашего приложения в App Store и Google Play вы не видите этой информации?
    Они вам просто процент перечисляют от всех транзакций и все, без детальной статистики?


    1. le_webr Автор
      12.10.2018 08:53

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


      1. Mobile1
        12.10.2018 09:31

        ок, а Play Google?


        1. le_webr Автор
          12.10.2018 09:58

          Все то же самое, аналогичные условия)


  1. SerafimArts
    12.10.2018 13:56

    Не «авторизация», а «аутентификация». Авторизация — это набор правил для проверки прав доступа к некому N, а в статье нет ни слова об этом.