2013-04-14 3 views
1

Я работаю с webApi и пытается реализовать формы auth. Мое приложение использует simpleMembership. По какой-то причине моих контроллеры возвращаются к моим полномочиям окна, чтобы проверить и посмотреть, если запрос проверки подлинности, когда он должен просто использовать simpleMembership против базы данных моего приложения:Настройка WebAPI для проверки подлинности форм

enter image description here

Я инвалиды окна и анонимной авторизация в приложении и в моем конфигурационном файле applicationhost ... что еще нужно сделать?

ответ

3

В ваших API контроллеров, когда необходимо обеспечить соблюдение аутентификации (непубличный контроллер или действий) вы должны использовать

[Authorize] 

... атрибут либо контроллеры или уровень действий, в соответствии с вашим необходимо. Обратите внимание, что это атрибут реализован на System.Web.Http не один в System.Web.Mvc

Один используется для Api контроллеров проверяет Thread.CurrentPrincipal.Identity.IsAuthenticated вместо HttpContext.User.Identity .IsAuthenticated как System.Web.Mvc.AuthorizeAttribute.

Вам необходимо заполнить эту Principal на каждый запрос, как правило, с помощью DelegatingHandler, что объясняется по этой ссылке:

http://www.piotrwalat.net/basic-http-authentication-in-asp-net-web-api-using-message-handlers/

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

+0

Спасибо Расиэль. У меня есть большинство методов, украшенных [Authorize], но вход/регистрация должны быть доступны для всех пользователей, поэтому я планирую оставить эти методы незавершенными. Правильно ли это звучит? И - есть ли у вас пример того, как я могу заполнить принципала? Это просто ручная настройка Thread.CurrentPrincipal.Identity внутри обработчика (одна строка кода)? – RobVious

+0

Несомненно, общественные методы не должны носить [Авторизовать]. Ссылка, представленная в моем ответе, показывает вам, как заполнить Принципала, контрольная строка № 16. Вы хотите сделать это в деле делегировании и хотите использовать базовую HTTP-аутентификацию или что-то более сложное, если необходимо. Для Basic Http Auth вы можете это проверить: http://leastprivilege.com/2012/10/23/mixing-mvc-forms-authentication-and-web-api-basic-authentication/ –

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