我已经使用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));
});