Restful API: как получить безопасный доступ к API? - PullRequest
2 голосов
/ 30 января 2012

Я только начал читать о реализации веб-сервисов RESTful и создании API RESTful.Я понял основную концепцию REST, но я немного ломал голову над тем, как ее безопасно реализовать?

Скажем, например, в моем веб-приложении есть процесс входа пользователя.После успешного входа в систему, что еще я должен передать в запросе RESTful для аутентификации на сервере ???Я могу подумать о следующем процессе:

  • пользователь входит в систему (POST имя пользователя / пароль для API)
  • API отвечает userkey
  • userkey сохраняетсялокально
  • При выполнении любых дальнейших запросов я включаю этот ключ в запрос аутентификации

Но здесь кажется, что userkey - это состояние, которое я отправляю в API, но RESTбывает без гражданства.Кроме того, это не слишком безопасно в случае отправки GET запросов.

Является ли OAUTH решением моей дилеммы?Или как-то иначе?Может ли кто-нибудь наставить меня на это ...

Спасибо

Ответы [ 2 ]

3 голосов
/ 30 января 2012

UserKey, или, лучше сказать, token , является состоянием на стороне клиента.Ваш RESTful API останется без сохранения состояния, поскольку он хранит этот токен не где.

Обычно этот токен представляет собой комбинацию некоторых сегментов (имя пользователя, пароль, дата входа в систему), хэшированных как MD5, SHA (или любой другой алгоритм). Когда клиент вызывает операцию вашего RESTful API , ваша служба будет сравнивать входящий токен с генерируемым на лету токеном, использующим те же сегменты.Если оба сгенерированных токена совпадают, запрос аутентифицируется.

Нет проблем с методами GET или POST: вам нужно получить свой токен из строки запроса или заголовка HTTP.

Точка для защиты вашего соединения - это вызов вашего RESTful API через SSL, поэтому ваша связь будет иметь высокий уровень безопасности.

Важная проблема с GET и отправкой этого токена с использованием строк запроса:возможно, он слишком длинный, и ограничения длины URL не позволят вам иметь множество аргументов в дополнение к самому токену.

По моему мнению, вам следует использовать глагол POST, потому что вы можете отправлять больше данных, это большегибкий и вы избегаете давать проблемные аргументы в строке запроса, что может быть плохо с точки зрения ведения журнала, поскольку вы собираетесь регистрировать имена пользователей, пароли, токены и другие вещи, которые являются конфиденциальной информацией, которая может поставить под угрозу ваших пользователей, если хакер воруетваши журналы (или какой-то нежелательный человек тоже проверяет ваш журнал).

2 голосов
/ 30 января 2012

OAuth не имеет статуса - это знак, который доказывает, что кто-то разрешил клиенту что-то сделать - например, водительские права, когда правительство разрешило гражданину ездить на машине по их улицам.

Итак- да - используйте OAuth.

...