服务器IIS上托管的.Net Core 2.x应用程序“未指定authenticationScheme”

时间:2018-09-18 16:22:26

标签: c# authentication iis asp.net-core-2.0

我有一个.Net核心Web应用程序,该应用程序托管在装有.Net核心的Windows Server 2016环境中。

我将过滤器包含在Startup.cs的ConfigureServices方法中,发布到服务器IIS,运行该应用程序后,发现Http 500错误。

这是我的ConfigureServices和Configure方法中的代码

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc()
        .AddJsonOptions(options => options.SerializerSettings.ContractResolver = new DefaultContractResolver());

    services.AddDbContext<LocalAppDBContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

    services.AddSingleton<IConfiguration>(Configuration);

    services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();

    services.AddAuthentication(IISDefaults.AuthenticationScheme);

            // Global filter
            services.AddMvc(config =>
    {
        var policy = new AuthorizationPolicyBuilder()
                            .RequireAuthenticatedUser()
        config.Filters.Add(new AuthorizeFilter(policy));
    });
}


public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
        app.UseBrowserLink();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
    }

    app.UseStaticFiles();

    app.UseAuthentication();

    app.UseStatusCodePagesWithRedirects("/Error/StatusCode/{0}");

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

在日志文件中,我在所有堆栈输出的顶部看到了这一点:

  

失败:Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware [0]
  发生未处理的异常:未指定authenticationScheme,也未找到DefaultChallengeScheme。
  System.InvalidOperationException:未指定authenticationScheme,也未找到DefaultChallengeScheme。

经过一番谷歌搜索后,似乎是因为未定义身份验证方案。

但是在我的services.AddMvc行上方,我有AddAuthentication,它使用IISDefaults身份验证方案:

services.AddAuthentication(IISDefaults.AuthenticationScheme);

您知道是什么原因导致此500个内部服务器错误吗?

1 个答案:

答案 0 :(得分:1)

我的问题中的代码是正确的。

这是一个愚蠢的错误,当我尝试使用域帐户来验证用户访问权限时,我没有启用Windows身份验证。默认情况下,使用匿名身份验证。