Авторизация через социальные сети

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

Под один из проектов пришлось каждую SDK интегрировать, ушло приличное количество времени. OAuth протокол на моей памяти не менялся, поэтому я решил реинженерить и выяснить на какие URL-ы нужно обращаться за токеном. Т.е. каждая соц. сеть по сути обращается на некий сервер, где отображается форма разрешения, а далее вызывается обратный адрес для передачи токена. Само собой 95% каждой библиотеки нам не нужно, т.к. нам нужн лишь токен, который нужно отправить на сервер. Решил разобрать что к чему, библиотек зарубежных соц. сетей в сети предостаточно, а вот российских не нашел. Задача разработать универсальный инструмент для OAuth авторизации в мобильном приложении.

Авторизация через ВКонтакте

Сервер для вызова нативного приложения социальной сети адрес сервера выглядит так: vkauthorize://authorize. Если приложение не установлено, то вызываем обычный web: https://oauth.vk.com/authorize.

В GET запросе нужно указать параметры:

  • client_id=<id приложения>
  • revoke=1
  • v=5.40
  • redirect_uri=vk<id приложения>://authorize?
  • response_type=token

После авторизации приложение или сайт будет передавать в URL схему vk<id приложения>:// токен авторизации тем самым вызывая ваше приложение.

Авторизация через Одноклассники

Сервер приложения: okauth://authorize
Обычный: https://connect.ok.ru/oauth/authorize

GET параметры:

  • client_id=<id приложения>
  • scope=VALUABLE_ACCESS
  • redirect_uri=ok<id приложения>://authorize
  • response_type=token

После авторизации приложение или сайт будет передавать в URL схему ok<id приложения>:// токен авторизации.

Авторизация через Яндекс

Сервер приложения: yandexauth2://authorize
Обычный: https://oauth.yandex.ru/authorize

GET параметры:

  • response_type=code
  • client_id=<id приложения>
  • redirect_uri=yx<id приложения>://authorize

После авторизации приложение или сайт будет передавать в URL схему yx<id приложения>:// код авторизации, по которому необходимо получить токен, отправив POST запрос на адрес: https://oauth.yandex.ru/token с POST параметрами:

  • grant_type: authorization_code
  • code: <код полученный в предыдущем шаге>
  • client_id: <id приложения>
  • client_secret: <секрет приложения>

В ответ придет токен авторизации.

Библиотека для авторизации

Опыт оформил в виде библиотеки для iOS и разместил на cocoapods. Интересно что независимо от количества социальных сетей роста приложения как такого не будет, слову сборка для iPhone XR размер ipa файла составил 43 KB.

Видео демонстрация

Быстро посмотреть в живую можно на маке командой:

Собственно зачем я так старался отвязаться от библиотек? Чтобы можно было легко перенести на другие платформы, в том числе и на кросс-платформу вроде Ionic Framework. Возможно дойдут руки допилить: Facebook, Microsoft и Google.

Может и до серверного скрипта руки дойдут, который по токену отдаст профиль пользователя соц сети и соответсвенно ответит что токен валидный.

Для авторизации через соц. сети на Ionic пометил для разбора плагины:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *