Как лучше организовать аутентификацию для REST API?

1) Я так понял http basic это плохо, если не используется ssl, т.к. по сети пойдет пароль в открытом виде.

2) Также предлагают иногда передавать с каждым запросом хеш от (пароль + адрес ресурса + текущее время + временную дельту). в этом случае у меня три вопроса:
- зачем передавать эти временные метки, что сервер с ними делает?
- получается, пароли на сервере должны храниться в открытом виде, т.к. надо будет восстановить хэш. Правильно ли это?
- безопасен ли такой подход без ssl?

3) если используется ssl какой вариант аутентификации самый правильный?
  • Вопрос задан
  • 3560 просмотров
Пригласить эксперта
Ответы на вопрос 2
@TsSaltan
Передавать пароль в открытом виде без ssl плохо.
Если нет ssl - нужно подписывать запросы, отправлять хеш( пароль + адрес ресурса + передаваемые данные + уникальный id запроса)

Уникальным id может быть временная метка, id можно записывать или сверять с текущей временной меткой на сервере. Если id запроса повторяется или разница между временной меткой и текущим временем достаточно большая, запрос не обрабатывается. Смысл такой защиты в том, что в случае перехвата запроса злоумышленником, он не сможет выполнить этот запрос снова, даже если подпись(хеш) верна.
https://ru.wikipedia.org/wiki/Nonce

Ну и желательно использовать алгоритмы хеширования sha2

И лучше хранить и использовать не пароль, а генерировать случайный ключ с длиной > 32 и со спецсимволами.
Ответ написан
nazarpc
@nazarpc
Open Source enthusiast
Смотря для какой цели, из вопроса не понятно.
Вообще можно использовать OAuth2 и токены (все популярные соц. сети и другие сервисы используют OAuth2 или, в отдельных уникальных случаях, OAuth1).
Всё что предполагает хранить пароли в открытом виде заранее неправильно.
Ответ написан
Ваш ответ на вопрос

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

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