我已经使用dotnet core 2.0设置了身份验证,如下所示:

1)在startup.cs中的app.UseAuthentication();中添加了Configure(..)
2)添加到ConfigureServices(..) startup.cs

services.AddAuthentication(options =>
{
    options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
    options.DefaultChallengeScheme = GoogleDefaults.AuthenticationScheme;
})
.AddCookie()
.AddGoogle(options =>
{
    options.ClientId = Configuration["auth:google:clientid"];
    options.ClientSecret = Configuration["auth:google:clientsecret"];
});

如果然后在我的Web-api Controller 上放置[Authorize]属性,它将向我挑战Google,我选择了一个帐户,该帐户将永远循环。

我发现的修复程序(.net core 2 Google Authentication login loop)是这样指定AuthenticationScheme的:
[Authorize(AuthenticationSchemes = GoogleDefaults.AuthenticationScheme)][Authorize(AuthenticationSchemes = CookieAuthenticationDefaults.AuthenticationScheme)]
(奇怪的是:to-me:在这种情况下都可以工作)

但是,我不确定在指定默认方案后为什么需要它。

如果默认方案不相关,是否可以指定默认方案,因为我不想每次使用该属性时都必须指定默认方案。

最佳答案

只需添加它,它将授权除具有[AllowAnonymous]的 Controller /方法外的所有 Controller /方法:

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

09-06 05:10