Я строю mvc 4 веб-проект api на Azure. Запросы к этому API пройти маршрут:Служба контроля доступа через IHttpModule с mvc 4 и веб-api, различные настройки безопасности для сайта и службы?
routes.MapHttpRoute(
name: "DefaultApi", // Route name
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
На том же домене и другим путем, у меня есть MVC веб-сайт создан:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
MVC веб-сайт просто HTML и Javascript страницу, которая взаимодействует с службами контроля доступа, чтобы получить токен, который затем переходит к сервису для получения данных через jQuery ajax.
Чтобы реализовать безопасность сервисов (проверить токен, отправленный API), я использую классы SWTModule и TokenValidator, как описано на этом article, а также вызов в моем проекте Web.Config веб-приложения MVC 4. атрибут веб-сервер:
<modules runAllManagedModulesForAllRequests="true">
<add name="SWTModule" type="SecurityModule.SWTModule, SecurityModule" />
</modules>
даже если я не пометили методы MVC контроллера с [Авторизоваться], загрузка страниц результатов веб-умолчанию в этой ошибки:
Server Error in '/' Application.
unauthorized
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.ApplicationException: unauthorized
Source Error:
Line 43: Line 44: // check that it starts with 'WRAP' Line 45: if (!headerValue.StartsWith("WRAP ")) Line 46:
{ Line 47: throw new ApplicationException("unauthorized");Source File: D:\Dev\VisualStudio2010\Projects\myServices\Azure\myDataInterfaces\SecurityModule\SWTModule.cs Line: 45
Stack Trace:
[ApplicationException: unauthorized]
SecurityModule.SWTModule.context_BeginRequest(Object sender, EventArgs e) in D:\Dev\VisualStudio2010\Projects\myServices\Azure\myDataInterfaces\SecurityModule\SWTModule.cs:45 System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +80 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +270
Мне кажется, что, несмотря на то, Я не отмечу d мои методы контроллера с [Authorize], они отклоняются, потому что моя проверка токена SWT запускается для каждого ответа, по-видимому, потому, что она вызвана раньше в веб-стеке из-за включения в атрибут Web.Config?
Может ли кто-нибудь указать мне в правильном направлении, как это сделать? Я хочу сделать так, чтобы веб-страница по умолчанию (метод индекса Home controller) показывала мой экран входа в систему, который затем перенаправляется на главную страницу. Эта главная страница должна возвращаться неавторизованно, если пользователь не вошел в систему с одним из доступных поставщиков идентификации ACS. Аналогично, я хочу опубликовать некоторые из моих методов API ApiController для веб-API и потребовать авторизацию для других.
В настоящее время у меня есть приложение MVC и служба веб-API, маршрутизируемые через один файл Global.asax в рамках одного проекта веб-приложения в одном решении для веб-роли в Visual Studio. Мне интересно, можно ли исправить это, чтобы отделить сайт HTML MVC и веб-API к различным проектам веб-приложений под тем же решением для веб-роли? Это все равно не даст мне средств для назначения требований к авторизации для некоторых методов контроллера, просто дайте мне другое место для маршрутизации контроллеров и ApiControllers.
Я чувствую, что я близок, но, возможно, не хватает чего-то большого, но, похоже, я не нашел его в Интернете. Кто-то выпрямил меня?
Спасибо, Alex
ОК ... это имеет смысл, мне казалось, что я использовал неправильную часть стека, чтобы делать то, что хотел, спасибо дать ThinkTecture статьи идти. – user483679