Как сделать аутентификацию внутри службы HTTP? - PullRequest
1 голос
/ 21 апреля 2009

В настоящее время у нас есть веб-сайт с функциями учетных записей пользователей, но мы стремимся предоставить API, позволяющий пользователям управлять своими учетными записями / выполнять действия через другие устройства / веб-сайты, предоставляя API для общих задач.

В настоящее время вход в систему осуществляется по протоколу HTTPS для обеспечения безопасности, а затем управляется с помощью PHP-сессий с соответствующими мерами безопасности для защиты от перехвата сессий и т. Д.

Как бы мы предоставили эту функциональность в API?

Как можно отправить логин, не выполняя POST? (Предположительно, GET - единственный способ сделать это через вызов API). Является ли URL-адрес безопасным? https://www.example.com/login/user-foo@password=bar? Происходит ли настройка https перед отправкой URL-адреса по сети?

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

Будет ли это работать?

Ответы [ 4 ]

2 голосов
/ 21 апреля 2009

Использовать стандарт, такой как OAuth ? Если вы разрешите это, то ваш пользователь может хранить аутентифицированный токен столько, сколько пожелает.

В качестве альтернативы вам может вообще не потребоваться какая-либо аутентификация, если вы можете перенаправить на логин, когда поступит какой-то запрос GET. Например: любой сайт может ссылаться на URL-адрес , добавить твит в Twitter , Когда вы не вошли в систему, Twitter сначала перенаправит вас на страницу входа. Ссылающемуся сайту даже не нужно знать имя пользователя Twitter.

(И да: HTTPS устанавливается на основе IP-адреса сервера до отправки URL-адреса.)

2 голосов
/ 21 апреля 2009

Вы можете использовать basic www-authentication . Это в основном заголовок, который содержит имя пользователя + пароль. Хорошая вещь об этом, это то, что он не имеет состояния (вам не нужен отдельный процесс входа в систему), и он очень хорошо поддерживается. Это также довольно просто реализовать. Пока вы обслуживаете его по https, безопасность в порядке.

Является ли URL-адрес следующим образом: https://www.example.com/login/user-foo@password=bar безопасный?

Неправильно помещать учетные данные в URL, поскольку они могут оказаться в журнале.

Происходит ли установка https перед отправкой URL-адреса по сети?

Да, https устанавливается перед протоколом http. Единственное, что может увидеть злоумышленник, - это IP-адреса конечных точек.

0 голосов
/ 22 апреля 2009

Вы можете выполнить аутентификацию в REST API, требуя, чтобы вызывающий абонент установил заголовок. то есть они устанавливают заголовок «X-YourApp-API-Key», который вы затем читаете и используете для аутентификации. Это позволяет вам аутентифицировать не только методы POST и GET, но и PUT, HEAD и DELETE, чтобы у вас был полный набор методов REST.

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

0 голосов
/ 21 апреля 2009

Задумывались ли вы об использовании SOAP поверх SSL? Теоретически вы должны иметь возможность аутентифицировать пользователя через SOAP.

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