2014-11-26 6 views
3

Я создаю SPA, который будет находиться в приложении WebAPI/OWIN (который будет размещен в IIS), который в настоящее время не имеет компонентов MVC, что всегда, а маршрут / будет только index.html.Безопасность статических файлов OWIN

Весь сайт вам понадобится, чтобы войти в Azure AD, прежде чем вы сможете что-либо сделать, и мы передадим токен-носитель на вызовы WebAPI, которые были сделаны.

Как сделать каждый запрос к статическому файлу (или, по крайней мере, каждому файлу HTML), чтобы вы вошли в систему?

ответ

1

Я не тестировал это, но это то, что я бы попробовал первым, поэтому я надеюсь, что он поставит вас на правильный путь.

  • Настройте приложение так Owin отбывающего все статические файлы через StaticFilesMiddleware. This article talks about how to do that

  • Перед тем, как зарегистрировать статический файл промежуточного уровня (с помощью метода .UseStaticFiles расширения) создать и зарегистрировать свой собственный RequireAuthenticationMiddleware, который проверяет, является ли запрос проходит проверку подлинности и, если он не возвращает соответствующий ответ (401, 403 или любой другой) , Вы захотите зарегистрировать этот RequireAuthenticationMiddleware после того, как вы сконфигурируете промежуточное ПО OWIN Auth, чтобы данные аутентификации находились в контексте OWIN.

0

Я не пытался, что с помощью Owin промежуточного уровня, но вы всегда могли упасть обратно, используя модуль HTTP, который проверяет наличие вашего Идент печенья или однонаправленного знак?

2

Я расскажу вам, как я это сделал, и как это работает для меня.

Я использую проверку подлинности Windows, а вот как я настроил его:

OwinHttpListener listener = appBuilder.Properties[typeof(OwinHttpListener).FullName] as OwinHttpListener; 
listener.Listener.AuthenticationSchemes = AuthenticationSchemes.IntegratedWindowsAuthentication; 

Тогда, согласно this stackoverflow answer, поместите следующий код между вашим Идент промежуточного (или код аутентификации, как приведенный выше код) и компоненты, которые вы хотите защитить. Он будет проверять, чтобы каждый запрос был аутентифицирован.

app.Use(async (context, next) => 
    { 
     var user = context.Authentication.User; 
     if (user == null || user.Identity == null || !user.Identity.IsAuthenticated) 
     { 
      context.Authentication.Challenge(); 
      return; 
     } 
     await next(); 
    }); 
Смежные вопросы