Обеспечение REST API, не изобретая велосипед

При разработке REST API - это распространенный для аутентификации пользователя сначала?

типичный вариант использования, который я ищу:

  • Пользователь хочет получить данные. Уверенный прохладный нам нравится совместно использовать! Получить общедоступный ключ API и читать далеко!
  • Пользователь хочет хранить/обновлять данные... woah, дожидаются! кто вы, можно ли сделать это?

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

А REST API, кажется, логический выбор с требованиями как это

Для иллюстрирования моего вопроса, я буду использовать простой пример.

у меня есть предмет в базе данных, которая имеет оценка атрибут (целое число 1 - 5).

, Если бы я понимаю REST правильно, я реализовал бы ПОЛУЧИТЬ запрос с помощью языка моего выбора, который возвращает csv, xml или json как это:

http://example.com/product/getrating/{id}/

Говорят, что мы выбираем JSON, который мы возвращаем:

{
  "id": "1",
  "name": "widget1",
  "attributes": { "rating": {"type":"int", "value":4} }
}

Это хорошо для общедоступных API. Я получаю ту часть.

то, Где у меня есть тонны вопроса, - то, как я комбинирую это с моделью обеспечения безопасности? Я привык к безопасности веб-приложения, где у меня есть состояние сеанса, идентифицирующее моего пользователя во все время, таким образом, я могу управлять тем, что они могут сделать то независимо от того, что они решают отправить мне. Насколько я понимаю это не УСПОКОИТЕЛЬНО, так было бы плохое решение в этом случае.

я попытаюсь использовать другой пример с помощью того же предмета/оценки.

, Если пользователь "JOE" хочет добавить оценка к пункт

, Это могло бы быть сделано с помощью:

http://example.com/product/addrating/{id}/{givenRating}/

В этот момент я хочу хранить данные, говоря, что "JOE" дал продукт {идентификатор} оценка {givenRating}.

Вопрос: Как я знаю, что запрос прибыл из "JOE" и не "БОБА".

, Кроме того, что, если это было для более здравомыслящих данных как номер телефона пользователя?

то, Что я имею до сих пор:

1) Используют встроенную функцию HTTP для аутентификации в каждом запросе, или плоскость HTTP или HTTPS.

Это означает, что каждый запрос теперь принимает форму:

https://joe:joepassword@example.com/product/addrating/{id}/{givenRating}/

2) Использование подход как S3 Amazon с и открытым ключом с закрытым ключом: http://www.thebuzzmedia.com/designing-a-secure-rest-api-without-oauth-authentication/

3) Использование cookie так или иначе и повреждение часть не сохраняющая состояние REST.

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

Это много походит на сессию использования в типичном веб-приложении и перезаписи всего стека самостоятельно, которые обычно мне означают, что "Вы делаете его неправильно" особенно при контакте с безопасностью.

РЕДАКТИРОВАНИЕ: Я предполагаю, что должен был упомянуть OAuth также.

73
задан jfrobishow 30 August 2011 в 02:38
поделиться