В ваших 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, который передавать учетные данные в виде простого текста по каждому запросу; но вы можете реализовать свою собственную стратегию аутентификации, чтобы заполнить Принципала, и это все, что вам нужно.
Спасибо Расиэль. У меня есть большинство методов, украшенных [Authorize], но вход/регистрация должны быть доступны для всех пользователей, поэтому я планирую оставить эти методы незавершенными. Правильно ли это звучит? И - есть ли у вас пример того, как я могу заполнить принципала? Это просто ручная настройка Thread.CurrentPrincipal.Identity внутри обработчика (одна строка кода)? – RobVious
Несомненно, общественные методы не должны носить [Авторизовать]. Ссылка, представленная в моем ответе, показывает вам, как заполнить Принципала, контрольная строка № 16. Вы хотите сделать это в деле делегировании и хотите использовать базовую HTTP-аутентификацию или что-то более сложное, если необходимо. Для Basic Http Auth вы можете это проверить: http://leastprivilege.com/2012/10/23/mixing-mvc-forms-authentication-and-web-api-basic-authentication/ –