ASP.NET Core 2.0 - AddAuthentication和DefaultScheme

5

我正在尝试将一个ASP.NET Core 1.1应用程序升级到2.0版本。该应用程序需要同时使用基本身份验证和JWT身份验证。我已经有了类似于以下代码的代码:

services.AddAuthentication(options =>
                    {
                        options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
                    })
                .AddBasic(BasicScheme, _ => { })
                .AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, options =>
                {...}

我的问题是我似乎无法同时让它们工作!无论哪一个我设为默认方案,只有设为默认的那个才有效,另一个则会出现HTTP 401错误。

请问有什么方法可以让它们同时工作吗?

3个回答

4

3
将此行代码添加到Startup.cs中对我有用:

将此行代码添加到Startup.cs中对我有用

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
        .AddCookie("LoggedIn");

3

您需要从AddAuthorization方法中移除选项:

services.AddAuthentication()
            .AddBasic(BasicScheme, _ => { })
            .AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, options =>
            {...}

然后,在Startup.cs文件中修改Configure()方法,添加以下Use指令:
app.Use(async (context, next) =>
        {
            // Write some code that determines the scheme based on the incoming request
            string scheme = GetSchemeForRequest(context);
            var result = await context.AuthenticateAsync(scheme);
            if (result.Succeeded)
            {
                context.User = result.Principal;

            }
            await next();
        });

现在,在 GetSchemeForRequest 方法中,您可以确定应该使用哪种方案。我在这里找到了答案,并应用于我的代码。它有效!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接