Привет и добро пожаловать в StackOverflow ?
Поведение, которое вы испытываете, связано с тем, что вы используете ASP.NET Identity.Когда вы вызываете services.AddIdentity
, за кулисами регистрируется схема проверки подлинности на основе файлов cookie, которая устанавливается в качестве схемы вызова по умолчанию, как вы можете видеть в коде здесь, на GitHub .
Дажехотя вы зарегистрировали схему проверки подлинности cookie и задали ее в качестве схемы по умолчанию, конкретные схемы по умолчанию - например, AuthenticateScheme
, ChallengeScheme
, SignInScheme
и т. д. - имеют преимущество.DefaultScheme
используется системой аутентификации только в том случае, если конкретный не задан.
Чтобы ответить на ваш вопрос, вы можете применить параметры конфигурации к параметрам cookie удостоверений ASP.NET с помощью вспомогательного метода services.ConfigureApplicationCookie
, вот так:
// ===== Add Identity ========
services.AddIdentity<User, IdentityRole>(o =>
{
o.User.RequireUniqueEmail = true;
o.Tokens.EmailConfirmationTokenProvider = "EMAILCONF";
// I want to be able to resend an `Email` confirmation email
// o.SignIn.RequireConfirmedEmail = true;
}).AddRoles<IdentityRole>()
.AddEntityFrameworkStores<ContestContext>()
.AddTokenProvider<EmailConfirmationTokenProvider<User>>("EMAILCONF")
.AddDefaultTokenProviders();
services.Configure<DataProtectionTokenProviderOptions>(o =>
o.TokenLifespan = TimeSpan.FromHours(3)
);
services.Configure<EmailConfirmationTokenProviderOptions>(o =>
o.TokenLifespan = TimeSpan.FromDays(2)
);
// ===== Configure Identity =======
service.ConfigureApplicationCookie(options =>
{
options.Cookie.Name = "auth_cookie";
options.Cookie.SameSite = SameSiteMode.None;
options.LoginPath = new PathString("/api/contests");
options.AccessDeniedPath = new PathString("/api/contests");
// Not creating a new object since ASP.NET Identity has created
// one already and hooked to the OnValidatePrincipal event.
// See https://github.com/aspnet/AspNetCore/blob/5a64688d8e192cacffda9440e8725c1ed41a30cf/src/Identity/src/Identity/IdentityServiceCollectionExtensions.cs#L56
options.Events.OnRedirectToLogin = context =>
{
context.Response.StatusCode = StatusCodes.Status401Unauthorized;
return Task.CompletedTask;
};
});
Это также означает, что вы можете безопасно удалить часть, в которую вы добавляете схему аутентификации на основе файлов cookie, поскольку об этом заботится ASP.NET Identityсама.
Дайте мне знать, как вы идете!