Промежуточное ПО OWIN не вызывается для всех запросов

Я пытаюсь добавить заголовок политики безопасности контента в заголовок ответа для запросов all. Итак, я создал промежуточное ПО OWIN.

public class SecurityHeaderMiddleware
{
    private readonly INonceService _nonceService = null;
    private readonly Func<Task> _next;
    public SecurityHeaderMiddleware(Func<Task> next, INonceService nonceService)
    {
        _nonceService = nonceService;
        _next = next;
    }

    public async Task Invoke(IOwinContext context)
    {            
       // do something here to add CSP header in context.Response.Headers

        await _next.Invoke();
    }

Затем, чтобы вызывать свое промежуточное ПО для каждого запроса, я регистрирую свое промежуточное ПО в маркере этапа startup.cs before PostResolveCache в соответствии с предложением здесь

public partial class Startup
{
    public void Configuration(IAppBuilder app)
    {
        app.Use((context, next) =>
        {
            var nonceService = ServiceLocator.Current.GetInstance<INonceService>();
           var middleware = new SecurityHeaderMiddleware(next, nonceService);
            return middleware.Invoke(context);
        });

        app.UseStageMarker(PipelineStage.PostResolveCache);

        app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AuthenticationType = "Cookies"
        });

        app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
       {
         // set options here 
       });



        MvcHandler.DisableMvcResponseHeader = true;
    }
}

Однако мое промежуточное ПО вызывается только для фактической страницы или любого запроса ajax, оно не вызывается, когда браузер делает запрос к javascript, CSS или изображениям.

Как вызвать пользовательское промежуточное ПО для всех запросов? Если не промежуточное ПО OWIN, то какие у меня есть варианты, чтобы добавить заголовок для всех запросов в asp.net


person LP13    schedule 01.05.2017    source источник


Ответы (1)


Думаю, PostAuthorize маркер этапа должен быть настроен для обработки запросов статического содержимого. Это даже упоминается в комментариях к связанной проблеме:

app.Use(...);

app.UseStageMarker(PipelineStage.PostAuthorize);
person Ilya Chumakov    schedule 03.06.2017