В этой статье хотим поделиться нашим опытом реализации системы авторизации пользователя на различных платформах. Это уникальное решение позволило нам не собирать и не хранить персональные данные пользователей. Совсем.
Предыстория
На первом этапе нашей командой было решено, что приложение будет иметь классическую систему авторизации/регистрации: 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-сервиса является очень важным фактом. И что важно, мы смогли реализовать процесс таким образом, чтобы он полностью соответствовал духу проекта — “приложение для народа”.
Комментарии (12)
Sabubu
11.10.2018 20:46У меня предложение установить десктопное, а в добавок еще и мобильное приложение не вызывает особого доверия. Кто его знает, может оно запишет номер телефона, IMEI, имя гуглоаккаунта и хеши всех файлов на SD-карте и отправит товарищу майору. Ну и для надежности еще и нажатия всех клавиш начнет записывать.
Платить можно криптовалютами или (если есть такая возможность), сделать анонимную систему оплаты через терминалы. А вместо закрытого проприетарного приложения взять тот же OpenVPN.
Mobile1
12.10.2018 07:48До конца непонятен такой момент — вам же в любом случае юзер оплачивает что-то с привязанной к апрстору кредитной карты — т.е. по крайней мере апсторы точно знают ФИО человека, оплачивающего именно ваш сервис и еще кучу инфы хранят, которую они выдергивают из устройства — оператора мобильной связи, устройство, страну и т.д.
Т.е. вы хотите сказать что, например в статистике вашего приложения в App Store и Google Play вы не видите этой информации?
Они вам просто процент перечисляют от всех транзакций и все, без детальной статистики?le_webr Автор
12.10.2018 08:53Apple Store никакой информации о клиентах не предоставляет, кроме страны, где была совершена покупка, суммы и даты транзакции. Никакой дополнительной информации мы не получаем.
SerafimArts
12.10.2018 13:56Не «авторизация», а «аутентификация». Авторизация — это набор правил для проверки прав доступа к некому N, а в статье нет ни слова об этом.
saipr
Да за это время до канадской границе можно добежать.
le_webr Автор
Тут прям просится ответ: Все!
поставить чайник согреться
мужа накормить
уроки проверить
в инете посидеть
на ответы ответить
эссе написать
ответить на смс)))