Аутентификация с помощью REST API

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

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


person Shawn Mclean    schedule 26.08.2011    source источник


Ответы (2)


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

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

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

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

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

ИЗМЕНИТЬ

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

person mnemosyn    schedule 26.08.2011
comment
+1 для REST Console для Google Chrome, упомяните :) Хороший! - person Pure.Krome; 04.03.2012
comment
I wouldn't use cookies in a REST API - Тем не менее, вы можете использовать его для создания защищенного токена, как в этом ответе < / а>. - person James; 22.08.2012
comment
@ Джеймс: это очень хороший аргумент. Конечно, лучше использовать токен, чем постоянно отправлять имя пользователя и пароль, потому что таким образом проще изолировать шаблонный код. - person mnemosyn; 22.08.2012

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

person Will Hartung    schedule 26.08.2011