📜  没有指定 authenticationScheme,也没有找到 DefaultChallengeScheme - 方案(1)

📅  最后修改于: 2023-12-03 15:26:57.181000             🧑  作者: Mango

没有指定 authenticationScheme,也没有找到 DefaultChallengeScheme - 方案

介绍

这是一个常见的 ASP.NET Core 认证错误,通常出现在没有正确配置应用程序的身份验证设置时。在未指定 authenticationScheme 或找不到适合的默认挑战方案时,AspNetCore 会抛出此错误。这将导致应用程序无法正确处理未经身份验证的请求,因为它不知道如何挑战身份验证。

原因

对于未经身份验证的请求,应用程序必须能够自动向用户返回一个身份验证挑战。这意味着它需要知道可以使用哪种身份验证方案来挑战用户。如果未指定 authenticationScheme 或指定的方案无效,则应用程序将无法正确地挑战用户。

解决方案

为了解决此错误,您需要指定应用程序支持的身份验证方案。您可以通过以下方式之一来完成此操作:

  1. 在认证添加管道之前添加一个自定义中间件,然后在其中指定 DefaultChallengeScheme。例如:

    app.Use(async (context, next) =>
    {
        context.SetEndpoint(null);
    
        var result = await context.AuthenticateAsync();
        if (result?.Principal != null)
        {
            context.User = result.Principal;
        }
        else
        {
            await context.ChallengeAsync("CustomScheme");
            return;
        }
    
        await next();
    });
    

    在此示例中,我们在自定义中间件中指定了 CustomScheme 作为默认挑战方案。当应用程序需要向用户返回身份验证挑战时,它将使用此方案。

  2. 在应用程序的 Startup.cs 文件中使用 AddAuthentication 方法来指定应用程序支持的身份验证方案。例如:

    services.AddAuthentication(options =>
    {
        options.DefaultScheme = "CustomScheme";
    })
    .AddCustomAuthentication(options =>
    {
        // 可以添加自定义身份验证方案
    });
    

    此示例使用 AddAuthentication 方法将 CustomScheme 设置为默认身份验证方案。您还可以使用 AddCustomAuthentication 方法添加自定义身份验证方案。

总结

在 ASP.NET Core 应用程序中,如未正确配置身份验证设置,则可能会出现 "没有指定 authenticationScheme,也没有找到 DefaultChallengeScheme - 方案" 错误。要解决此错误,您需要指定应用程序支持的身份验证方案,并在需要时向用户返回身份验证挑战。通过在认证管道中添加自定义中间件或使用 AddAuthentication 方法,您可以轻松地解决此错误。