2012-01-30 2 views
2

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

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

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

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

Является ли ОАУТ решением моей дилеммы? Или каким-то другим способом? Может кто-нибудь наставит меня на этом ...

Благодаря

ответ

3

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

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

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

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

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

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

2

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

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

Смежные вопросы