Asp.Net Core Явная установка схемы файлов cookie не работает

Я пытаюсь использовать как схему 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 не работает?


person Tom el Safadi    schedule 08.05.2019    source источник
comment
Как создается файл cookie? Создан ли файл cookie ASP.NET Core Identity? В этом случае этот файл cookie не будет использоваться вашим обработчиком CookieAuthenticationHandler по умолчанию. Если нет, не могли бы вы показать нам, как вы входите в систему, чтобы получить файл cookie?   -  person itminus    schedule 09.05.2019
comment
Да, я использую Asp.Net Core Identity для создания файла cookie. Я не понимаю, как это работает, если я просто ставлю атрибут [Authorize] без ничего. Знаете ли вы, как правильно настроить его при использовании Identity?   -  person Tom el Safadi    schedule 09.05.2019
comment
Если вы используете Identity для генерации кода, схема по умолчанию для идентификации — Identity.Application, поэтому измените код на [Authorize(AuthenticationSchemes = "Identity.Application")]. Обратите внимание, что файл cookie, отправляемый на сервер, должен быть .AspNetCore.Identity.Application=CfDJ8LZ4qAV8K.....   -  person itminus    schedule 09.05.2019
comment
Если вас интересует причина: имя файла cookie по умолчанию для простой схемы файлов cookie — .AspNetCore.Cookies вместо .AspNetCore.Identity.Application. Кроме того, предохранителем данных для схемы файлов cookie по умолчанию является `options.DataProtectionProvider.CreateProtector(Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware, name, v2);`.   -  person itminus    schedule 09.05.2019
comment
Просто интересно узнать о вашем дизайне: если вы используете ASP.NET Core Identity, зачем снова регистрировать другую схему файлов cookie?   -  person itminus    schedule 09.05.2019
comment
Хорошо, большое спасибо за подробные ответы! Я реализую это завтра и дам вам знать, если это сработало.   -  person Tom el Safadi    schedule 09.05.2019
comment
Что вы имеете в виду под регистрацией другой темы cookie? Вы имеете в виду код из startup.cs?   -  person Tom el Safadi    schedule 09.05.2019
comment
Если вы используете Identity, он автоматически зарегистрирует встроенный обработчик файлов cookie. Вам не нужно регистрировать еще один до .AddCookie(CookieAuthenticationDefaults.AuthenticationScheme)   -  person itminus    schedule 09.05.2019
comment
Да, я действительно забыл вытащить это, поскольку пытался понять, почему это не работает. Вы имеете в виду только «CookieAuthenticationDefaults.AuthenticationScheme», верно? «.AddCookie()» мне, очевидно, нужно, как я понимаю? Извините, я новичок в Identity....   -  person Tom el Safadi    schedule 09.05.2019
comment
В вашем случае нет необходимости вызывать invoke.AddCookie() вручную. Identity сделает это за вас. См. CookiesBuilder.   -  person itminus    schedule 09.05.2019
comment
Ладно, спасибо за подробности!   -  person Tom el Safadi    schedule 09.05.2019
comment
Кажется, что эта тема затрагивает тот же вопрос. Я создал демо и теперь почти уверен, что оно отлично работает для меня. Если вы все еще не можете это сделать, не стесняйтесь информировать меня.   -  person itminus    schedule 09.05.2019
comment
Если у меня возникнут дополнительные проблемы с идентификацией, я вернусь к вам :). Похоже, ты много знаешь об этом!   -  person Tom el Safadi    schedule 09.05.2019