为什么dotnet core [Authorize]在设置默认值时需要一个方案

时间:2018-01-16 18:37:06

标签: asp.net asp.net-web-api asp.net-core-2.0 .net-core-2.0

我已经使用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控制器上删除[授权]属性,它将挑战我谷歌,我选择一个帐户,它永远循环。

我找到的修复程序(.net core 2 Google Authentication login loop)是指定AuthenticationScheme,如下所示:

[Authorize(AuthenticationSchemes = GoogleDefaults.AuthenticationScheme)][Authorize(AuthenticationSchemes = CookieAuthenticationDefaults.AuthenticationScheme)]

(奇怪的是:to-me:都适用于这种情况)

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

如果默认方案不相关,我可以指定默认方案,因为我不希望每次使用该属性时都指定它。

1 个答案:

答案 0 :(得分:0)

只需添加它,它将授权除[AllowAnonymous]以外的所有控制器/方法:

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