Аутентификация с использованием REST API - PullRequest
7 голосов
/ 26 августа 2011

Я создаю REST API в asp.net mvc.Моя система использует аутентификацию форм.Имя пользователя / пароль или openId / fbconnect и т. Д. Если у меня есть атрибут [Authorize] в действии, как приложение для Android или настольное приложение получит доступ к методу?

Или лучше задать вопрос:я буду проектировать настольное приложение для аутентификации?Нужно ли передавать API-ключ или какой-нибудь токен?Или настольное приложение будет вести себя как браузер и использовать внутренние куки?Я не совсем уверен, как RESTful API будет работать вне веб-браузера с аутентификацией.

Ответы [ 2 ]

14 голосов
/ 26 августа 2011

Я бы не использовал куки в REST API.FormsAuthentication - это метод на основе файлов cookie.Вместо этого вызывающий должен предоставлять учетные данные для аутентификации при каждом запросе в заголовке или в качестве параметра запроса.

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

Я бы написал пользовательский AuthorizeAttribute для выполнения аутентификации в вашем коде, что дает вам большой контроль.Кроме того, вы можете использовать базовый класс контроллера и переопределить метод OnAuthorization.

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

Если вы хотите протестировать REST API, я предлагаю вам использовать REST Console для Google Chrome и Curl .Первый проще для начинающих и поставляется с приятным графическим интерфейсом, а cURL дает вам еще большую точность и множество протоколов.

РЕДАКТИРОВАТЬ

Несколько педантичное примечание: некоторые APIдаже те из довольно крупных провайдеров, как Twitter, время от времени возвращают 401 коды состояния, как правило, пропуская (обязательный) заголовок WWW-Authenticate, потому что он не собирался оспаривать клиента.

1 голос
/ 26 августа 2011

Взгляните на схему аутентификации Amazons AWS.Он делает то, что хочет большинство, и использует стандартный заголовок авторизации HTTP.

...