2013-08-03 5 views
1

Я хочу, чтобы мой сервер API REST мог общаться только с моим приложением iOS. База пользователей будет составлять не более 1000 человек, а рынок довольно маленький и непопулярный в целом. Вот почему я думаю, что что-либо, кроме простой проверки подлинности ответа на запрос (HTTP, OAuth 2.0, SSL), будет излишним. Но я точно не знаю, как это должно произойти. Вот что я имею в виду:Как точно реализовать запрос-ответ для аутентификации REST API?

  • приложение клиента (пользователя) отправляет запрос: api.example.com/auth?username=john
  • Сервер отвечает со случайным строки: «somerandomlygeneratedstring»
  • Клиент берет строку, добавляет ее к имени пользователя, а затем добавляет секретную строку, жестко закодированную в приложении, и использует MD5 для хеширования всей строки.
  • Клиент передает строку на сервер: api.example.com/auth?username=john & ответ = thenewMD5hashstring
  • сервер генерирует тот же MD5 хэш строки и если они совпадают, то метки этого пользователя, как проверку подлинности в базе данных и все запросы API от этого пользователя будут обработаны с этого момента.

Есть ли у меня правильная идея? Или я совершенно неправ? Пожалуйста, имейте в виду, я хочу базовую безопасность, что-то слишком причудливое, было бы излишним для такого маленького проекта.

Кроме того, я не хранил никаких конфиденциальных данных в своей базе данных, как личные данные.

ответ

1

Вы должны просто использовать HTTP Basic auth для каждого запроса через заголовок Authorization и иметь все свои взаимодействия через SSL. Если вам нужна базовая безопасность, нет необходимости идти дальше этого.

Существует несколько проблем со схемой, которую вы имеете в виду.

  • Ваш последний шаг - это, по сути, сеанс на стороне сервера, что неприемлемо в REST.
  • MD5 эффективно разрушен и не должен использоваться ни для чего, кроме проверки целостности.
  • В REST вы должны использовать стандартизованный метод аутентификации, предоставляемый протоколом, если он соответствует вашим потребностям. Повторное использование этого параметра для использования параметров URI, как вы имеете в виду, не нужно.
  • Схема хэширования, которую вы имеете в виду, имеет смысл только тогда, когда вы хотите подписать запрос, гарантируя, что он не был подделан.
Смежные вопросы