Безопасное предоставление учетных данных для RESTFUL API - PullRequest
5 голосов
/ 03 июня 2009

Я создал серверное приложение RESTful, которое обслуживает запросы по полезным URL-адресам, таким как www.site.com/get/someinfo. Он построен весной.

Однако этот доступ защищен паролем. Сейчас я создаю клиентское приложение, которое будет подключаться к этому приложению RESTful и запрашивать данные через URL. Как я могу передать учетные данные? В настоящее время он просто открывает окно пользователя / пароля для пользователя, но я хочу, чтобы пользователь мог вводить имя пользователя и пароль в поле клиентского приложения, и чтобы клиентское приложение передавало учетные данные приложению RESTful, когда он запрашивает данные. Клиент построен с использованием Struts.

Приветствия

РЕДАКТИРОВАТЬ - Я не думаю, что сделал вопрос достаточно ясным. Я уже форсирую HTTPS, мой вопрос больше в коде, когда я запрашиваю данные с www.site.com/get/someinfo, как мне передать свои учетные данные вместе с выполнением запроса?

Ответы [ 4 ]

5 голосов
/ 05 июня 2009

У вас более или менее есть 3 варианта:

  1. HTTP Auth
  2. Сверните свой собственный протокол, в идеале HMAC на основе запроса / ответа
  3. OAuth

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

OAuth также должен быть уроком о том, насколько сложно разрабатывать безопасные протоколы, и поэтому я не решаюсь рекомендовать свернуть свой собственный маршрут.

Это оставляет HTTP-аутентификацию, что, вероятно, лучше, если вы можете его использовать.

Все это говорит о том, что почти все в Интернете использует аутентификацию на основе форм, и многие даже не беспокоятся о https для обеспечения безопасности на транспортном уровне, поэтому, возможно, простая отправка текста пароля в открытом виде "достаточно хороша" для ваших целей. Тем не менее, я бы даже рекомендовал использовать https, так как это, по крайней мере, уменьшает опасность для человека в средней атаке.

2 голосов
/ 05 июня 2009

Если вы можете добавить заголовки HTTP к вашим запросам, вы можете просто добавить заголовок Authorization:

Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

где вы используете базовую аутентификацию, а бит QWxhZGRpbjpvcGVuIHNlc2FtZQ== имеет кодировку "username:password" base64 (без кавычек). RFC 2617

1 голос
/ 04 июня 2009

Ну, https не имеет ничего общего с аутентификацией, это просто шифрование на транспортном уровне.

если вы взаимодействуете с API-интерфейсом HTTP, будь то https или нет, и появляется диалоговое окно, это означает, что он использует HTTP-аутентификацию, базовую или дайджест-версию. Если ваш клиент создает экземпляр http-клиента для чтения данных из этих «служб», вы можете передать эти учетные данные при создании экземпляра объекта.

Если вы используете клиентский скрипт, XmlHttpRequest также поддерживает http-аутентификацию.

Таким образом, с точки зрения кода, способ передачи учетных данных службам RESTful зависит от используемого вами http-клиента (объекта, который вы создаете для получения данных). Вы можете просто получить такое имя пользователя / пароль у клиента и использовать его для вызова другой службы.

0 голосов
/ 05 июня 2009

посмотрите на существующие решения. В этом случае oauth

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...