Я мимо проходил и, вроде, все верно, кроме:
С мобильного приложения я отправляю логин и пароль на сервер api.
Никогда! Слышишь, Карл?! НИКОГДА НЕ ПЕРЕСЫЛАЙ данные авторизации на сервер БЕЗ ПРЕДВАРИТЕЛЬНОГО ХЕШИРОВАНИЯ на стороне клиента серверным ключом.
1. Данные на клиенте: hash(USER1:PASSWORD:SKEY:RANDOM),
2. Пересылаю на сервер: ab1e37ab50c61d8c80fb5cb4b1e3122f:RANDOM
3. Ищу на сервере совпадение:
ab1e37ab50c61d8c80fb5cb4b1e3122f===hash(USER:PASSWORD:SKEY:RANDOM) и получаю учётку пользователя, если все верно.
А так, да! Спасибо,
Сергей Протько - все довольно четко и верно написано!