Файл cookie сеанса нельзя снять с защиты, когда веб-приложение ASP.NET Core 8.0 работает в IIS.C#

Место общения программистов C#
Ответить
Anonymous
 Файл cookie сеанса нельзя снять с защиты, когда веб-приложение ASP.NET Core 8.0 работает в IIS.

Сообщение Anonymous »

После добавления приведенной ниже конфигурации в Startup.cs веб-приложения ASP.NET Core MVC, ориентированного на .NET 8.0:

Код: Выделить всё

services.AddSession(options =>
{
options.IdleTimeout = TimeSpan.FromMinutes(50);
options.Cookie.IsEssential = true;
options.Cookie.HttpOnly = true;
options.Cookie.SameSite = SameSiteMode.Strict;
});

...

app.UseSession();
приложением, развернутым на сервере IIS 8.5 (Windows Server 2012 R2), регистрируются сотни таких предупреждений:

https://example.com/Login: ошибка при снятии защиты файла cookie сеанса.
Logger: Microsoft.AspNetCore.Session.SessionMiddleware
Callsite: Microsoft .AspNetCore.Session.CookieProtection.Unprotect
Исключение: System.Security.Cryptography.CryptographicException:
ключ {x-y-z} не найден в связке ключей. Для получения дополнительной информации перейдите
по адресу https://aka.ms/aspnet/dataprotectionwarning по адресу
Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.UnprotectCore(Byte[]
protectedData, BooleanallowOperationsOnRevokedKeys, UnprotectStatus&
статус) в
Microsoft.AspNetCore.Session.CookieProtection.Unprotect(IDataProtector
protector, String protectedText, регистратор ILogger)
используется только для хранения списка объявлений, которые будут отображаться пользователю после входа в систему:

Код: Выделить всё

[HttpPost]
public async Task Login(...)
{
...
await announcementService.BuildAnnouncementsFor(user);
...
}
В конечном итоге BuildAnnoucementsFor сохраняет список объявлений (т. е. строк) для сеанса с помощью IHttpContextAccessor.HttpContext.Session, который настраивается следующим образом:

Код: Выделить всё

services.AddHttpContextAccessor();

services.AddSingleton();
Я уже настроил загрузку профиля пользователя в конфигурации IIS, поскольку DataProtection, похоже, связана с проблемой, и когда пул приложений был (пере)запущен, появилось следующее предупреждение также был зарегистрирован:

Ни профиль пользователя, ни реестр HKLM недоступны. Использование хранилища эфемерных
ключей. Защищенные данные будут недоступны после
закрытия приложения.

В приведенном выше последнем предупреждении исчезло, но SessionMiddleware все еще предупреждает о Ключ шифрования не найден в связке ключей. Действительно, ключи, указанные в предупреждениях, не находятся в папке C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys, где IIS по умолчанию ищет ключи.
Мне бы очень хотелось, чтобы эти предупреждения исчезли, но я не знаю, что еще нужно настроить — в коде или в IIS.

Подробнее здесь: https://stackoverflow.com/questions/786 ... -runs-on-i
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»