【问题标题】:static files - asp.net web api core 2.1 authentication scheme Bearer静态文件 - asp.net web api core 2.1 身份验证方案 Bearer
【发布时间】:2018-12-07 02:05:41
【问题描述】:

如何避免静态文件被认证?

对于静态文件(图像、.js、.css 等)的每个请求,都会记录一条消息,其中包含“AuthenticationScheme:“Bearer”未通过身份验证。”。尽管在配置设置为调试时才记录该消息,但在此浪费的资源是不必要的。

一切正常,我只是想避免检查这些请求的身份验证。有没有办法禁用这个?我已经尝试了在 Configure 方法上设置身份验证的位置的几种变体,但没有任何效果。

这是我当前的配置:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        var locOptions = app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>();
        app.UseRequestLocalization(locOptions.Value);

        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Error");                
        }

        app.UseStaticFiles();
        app.UseSpaStaticFiles();
        app.UseCors("default");
        app.UseAuthentication();
        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller}/{action=Index}/{id?}");
        });    

        app.UseSpa(spa =>
        {                
            spa.Options.SourcePath = "ClientApp";

            if (env.IsDevelopment())
            {
                spa.UseReactDevelopmentServer(npmScript: "start");
            }
        });            

        DataAccessLayer.WebHelpers.Configure(app.ApplicationServices.GetRequiredService<IHttpContextAccessor>());
    }

【问题讨论】:

    标签: identityserver4 static-files bearer-token asp.net-core-2.1


    【解决方案1】:

    好的,通过分支请求管道得到它,只对'/api'路径应用授权:

            //app.UseAuthentication();
            app.MapWhen(x => x.Request.Path.Value.StartsWith("/api"), builder =>
            {
                builder.UseAuthentication();
                builder.UseMvcWithDefaultRoute();     
            });
    
            app.MapWhen(x => !x.Request.Path.Value.StartsWith("/api"), builder =>
            {
                builder.UseMvcWithDefaultRoute();
                builder.UseSpa(spa =>
                {
                    spa.Options.SourcePath = "ClientApp";
                    if (env.IsDevelopment())
                    {
                        spa.UseReactDevelopmentServer(npmScript: "start");
                    }
                });
            });
    

    【讨论】:

      最近更新 更多