Я пытаюсь использовать как схему JWT, так и схему Cookie в своей авторизации. Как описано в статье Microsoft. Когда я это делаю, я вижу, что это работает для запросов, использующих авторизацию JWT. Я попробовал это, сделав запрос от Postman, включая токен JWT. Однако это не работает для запросов Ajax, исходящих от просмотров моего сайта, поэтому используется авторизация Cookie.
Сужение этой проблемы показало мне, что даже если я явно укажу схему Cookie, это не сработает:
[Authorize(AuthenticationSchemes = CookieAuthenticationDefaults.AuthenticationScheme)]
Это работает, только если я вообще не указываю схему:
[Authorization]
Это мой Startup.cs:
services.AddAuthentication()
.AddCookie(CookieAuthenticationDefaults.AuthenticationScheme)
.AddJwtBearer(cfg =>
{
cfg.TokenValidationParameters = new TokenValidationParameters()
{
ValidIssuer = _configuration["Tokens:Issuer"],
ValidAudience = _configuration["Tokens:Audience"],
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["Tokens:Key"]))
};
});
Кто-нибудь еще сталкивается с этой проблемой? Или кто-нибудь знает, почему явная установка схемы Cookie не работает?
ASP.NET Core Identity
? В этом случае этот файл cookie не будет использоваться вашим обработчиком CookieAuthenticationHandler по умолчанию. Если нет, не могли бы вы показать нам, как вы входите в систему, чтобы получить файл cookie? - person itminus   schedule 09.05.2019Identity
для генерации кода, схема по умолчанию для идентификации —Identity.Application
, поэтому измените код на[Authorize(AuthenticationSchemes = "Identity.Application")]
. Обратите внимание, что файл cookie, отправляемый на сервер, должен быть.AspNetCore.Identity.Application=CfDJ8LZ4qAV8K....
. - person itminus   schedule 09.05.2019.AspNetCore.Cookies
вместо.AspNetCore.Identity.Application
. Кроме того, предохранителем данных для схемы файлов cookie по умолчанию является `options.DataProtectionProvider.CreateProtector(Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware, name, v2);`. - person itminus   schedule 09.05.2019.AddCookie(CookieAuthenticationDefaults.AuthenticationScheme)
- person itminus   schedule 09.05.2019.AddCookie()
вручную.Identity
сделает это за вас. См. CookiesBuilder. - person itminus   schedule 09.05.2019