2010-04-20 3 views
2

Я нахожусь в середине разработки веб-приложения для социальных сетей PHP, которое будет поддерживаться различными веб-службами, каждый из которых работает с REST API. Веб-сервисы, вероятно, будут реализованы в Java с уровнем данных MySQL, но вся суть того, что я пытаюсь сделать, - это действительно упростить реализацию модулей на разных языках/хранилищах данных в зависимости от того, что является approriate.Защита REST API

Так, например, когда пользователь регистрируется в приложении через форму входа, код PHP подключается к веб-службе, а POST - имя пользователя и пароль, чтобы проверить, должны ли они быть аутентифицированы. Обычно я должен начать сеанс и хранить его в хранилище данных сеанса.

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

Хотя я понимаю, как реализовать веб-службу REST в Java и установить соединение с ней на PHP, я совершенно не уверен, как защитить передаваемые данные и убедиться, что это данные пользователей, которые возвращаются. Если, например, я хочу получить все пользовательские личные сообщения, как известно веб-службе, чтобы вернуть этих пользователей. Я мог бы передать этот идентификатор пользователей как часть URL-адреса GET, но, конечно же, любой старый пользователь мог бы просто вычислить URL-адрес GET и использовать его для поиска сообщений других людей. Я подумал, может быть, я могу передать идентификатор сеанса и IP-адрес, который позволит мне проверить хранилище данных сеанса и убедиться, что он правильный пользователь?

Чтобы защитить важные данные - например, имя пользователя/пароль, я думал, что просто передам его через SSL.

Надеюсь, это объяснит мою проблему лучше.

Thanks

+0

Разрабатываете ли вы решение для Интернета или интрасети? Используете ли вы продукты Microsoft (ASP.NET MVC или WFC 3.5/4.0) для создания службы и IIS для ее размещения? Вы хотите иметь аутентификацию или конфиденциальность?С дополнительной информацией вы могли бы получить лучший ответ. – Oleg

+0

Я добавил намного больше информации в свете комментария Олега. Извините за неясность предыдущего вопроса - написано очень поздно ночью! – christophmccann

ответ

2

Взгляните на аутентификацию HTTP Digest. Большинство клиентов должны его поддерживать, и это означает, что данные аутентификации могут передаваться безопасно с каждым запросом как часть заголовков без вмешательства в полезную нагрузку самого запроса.

-1

Это в основном 2 вопроса.

Когда конфиденциальность вызывает беспокойство, я бы выбрал наиболее безопасный вариант: подавать данные через SSL (через HTTPS).

Что касается аутентификации, существует несколько возможностей. Базовый через SSL является одним из них, но простая форма входа с файлом cookie может быть другой. (Например, аутентификация ASP.Net Forms). Все зависит от того, как вы хотите реализовать свой механизм аутентификации.

+4

Форма входа не подходит для API. –

1

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

0

Имейте в виду, что ваш api должен имитировать HTTP-протокол.

Http не имеет гражданства, и, добавив любые сеансы или около того, вы пытаетесь подделать метод «Alwaysconnected».

С LoginForm, это как я должен отправить два запроса для каждого из вызовов;)

+0

Итак, если у меня есть веб-приложение, в котором находятся пользователи, я обычно создаю сеанс, который будет храниться в базе данных. Мой план состоял в том, чтобы использовать PHP просто как окончательную часть построения страницы. Таким образом, веб-приложение будет отправлять вызовы нескольким успокоительным веб-службам, чтобы получить все данные. Но в зависимости от того, кто вы вошли в систему, поскольку это будет зависеть от того, какие данные вы вернули. Поэтому я подумал, что вам придется каким-то образом аутентифицироваться в веб-сервисе, чтобы он знал, кто вы. Вы говорите, что, поскольку протокол HTTP является апатридом, он не будет использовать REST для этого? – christophmccann

+1

На мой взгляд, api должен быть простым по своей реализации, его именам ... С помощью Session вы ограничиваете разработчиков наличием механизма cookie, не так ли? Если вы просто используете HTTP-аутентификацию, вероятно, достаточно использовать http://php.net/manual/en/features.http-auth.php. – dzen

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