Sanu0074
@Sanu0074

Авторизация через соц. сети с помощью sdk небезопасна (android). Как должен выглядеть алгоритм на сервере?

Я пишу android-приложение, клиент для сайта. Остановился на авторизации, стоит серьезный вопрос безопасности. Итак, для начала расскажу как работает на этом сайте авторизация/регистрация через соц. сети (подправьте если тут допущены ошибки). Сначала пользователь делает запрос на my-site.com/oauth_vk, далее сервер шлет запрос с clientID, clientSecret и callbackURL на сервер соц.сети, при успешной авторизации когда пользователь подтвердил разрешение использовать его данные, мы получаем его данные от сервера соц. сети. Среди этих данных есть его ID в соц. сети, по нему мы делаем запрос к бд и понимаем нужно нам зарегать его или просто авторизовать, но в любом случае мы из нашей бд достаем его ID на нашем сайте и хэш для того чтоб записать в куки (для дальнейшей аутентификации по ним).

Этот процесс с моей точки зрения является безопасным, т.к. clientID, clientSecret хранятся на сервере, и подделать запрос не возможно.

Но, ситуация с android-приложением другая. Я написал часть, когда мы уже получили данные юзера из соц. сети в приложении. Далее, надо бы делать запрос на сервер с ID юзера из соц. сети чтоб достать из нашей бд его ID на нашем сайте и хэш для выполнения дальнейших запросов. Здесь я остановился, т.к. любой кто декомпилирует приложение, увидит как получить ID и хэш на сайте используя ID юзера в соц. сети (его не трудно узнать любому), и может таким образом авторизовываться от имени кого угодно. (А так же, он узнает app_id соц. сети).

Это критическая проблема, пока не пойму что делать дальше. Подскажите, как все же правильно реализовать авторизацию на сервере используя android-sdk, чтобы не было таких дыр в безопасности.
  • Вопрос задан
  • 693 просмотра
Решения вопроса 1
Sanu0074
@Sanu0074 Автор вопроса
VKScope.OFFLINE и проверка токена на сервере решают задачу!
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
tomnolane
@tomnolane
профессиональный разработчик
мей би... сделать так, чтобы все сравнения (ID) проходили не в андроид приложении? а на самом сайте? И вообще, всю процедуру сделать так, чтобы андроид передаёт только специальные запросы (например в формате json) на сайт, а на самом сайте идёт всё остальное (проверка, подключение и прочие алгоритмы)? В приложении единственное, что должно - это "методика" (например API) общения с сайтом (без каких-либо хранений подключений к БД). И в зависимости от полученных результатов сайт - передаёт те или иные сообщения(ответы) в приложение.
Ответ написан
@vshvydky
Узнать айди приложения может каждый, зайдя в настройки своих приложений. Критической дыркой в безопасности здесь является то, что пользователь делитсф своими данными с вами.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы