@Mybiz

Как сделать безопасную авторизацию юзера в мобильном приложении?

Есть некое мобильное приложение, которое стучится к API на сервере.
Если делать авторизацию юзера через веб токен, то нужно:
Генерировать токен при авторизации, отдавать его мобильному приложению, и мобильное приложение при запросе к сервису каждый раз будет передавать этот токен.

Допустим, у юзера есть некий ключ hash($key.$username), но вопрос как расшифровывать такое на сервере?
Я так понимаю, что этот токен нужно шифровать, но как тогда расшифровывать данный токен

Не могу понять как работает этот алгоритм. Пишут что надежно что ни username ни key нипазу не передается но что мешает злоумишленику украсть hash(usernam.key) и успешно им пользоватся?
  • Вопрос задан
  • 5028 просмотров
Решения вопроса 1
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
расшифровывать не нужно ))
нужно просто сравнить с такой же парой на сервере через код...
1. вы передаете username и hash (key - НЕ ПЕРЕДАЕТЕ!)
2. затем берете на сервере вычисляете (по пришедшему username) hash и сравниваете его с тем, что пришел.
3. равны - AUTH OK.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
Пользователь вам отправляет свой логин/пароль.
Вы по нему генерируете случайный токен, кладете его в базу, отправляете пользователю.
Для полного счастья хорошо всю работу с api вести через https, в этом случае без серьезной подготовки никто этот токен не украдет.
Мне кажется что в 99% случаев этого вполне достаточно.

Альтернативное решение - не использовать токен, а использовать в каждом запросе хеш, генерящийся на основе данных запроса и пароля пользователя (при этом сам пароль не передается)
условно что то вроде
$hash = md5($password . "method=users&rand=23084723984623947&limit=10");
$url = 'http://api.site.ru/users?rand=23084723984623947&limit=10&'.$hash;

Даже если запрос будет скропрометирован - максимум что получится сделать это его повторить.
С учетом того что при определенных методиках генерации rand можно сказать что rand должен быть уникальным для пользователя к примеру за месяц - получаем достаточно надежную историю.
И да, это велосипед, как это называется правильно к сожалению не знаю, думаю другие подскажут :)
Ответ написан
Комментировать
FanKiLL
@FanKiLL
А что мешает украсть куки, ведь они как и токен каждый раз отправляются браузером на сервер.
Имхо если дойдёт до того что украдут у пользователя токен - то это уже его проблема.
Если вы выдаёте токен при логине, пусть в такой ситуации перелогинется и получит новый токен.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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