Можно ли отключить шифрование защиты данных в ASP.NET Core? - PullRequest
0 голосов
/ 27 апреля 2019

Первоначально в Startup.cs, Мы полностью пропустили вызов AddDataProtection(). Когда мы попытались развернуть приложение, мы увидели это:

System.Security.Cryptography.CryptographicException: The key {...} was not found in the key ring.
   at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.UnprotectCore(Byte[] protectedData, Boolean allowOperationsOnRevokedKeys, UnprotectStatus& status)
   at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.DangerousUnprotect(Byte[] protectedData, Boolean ignoreRevocationErrors, Boolean& requiresMigration, Boolean& wasRevoked)
   at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.Unprotect(Byte[] protectedData)
   at Microsoft.AspNetCore.Session.CookieProtection.Unprotect(IDataProtector protector, String protectedText, ILogger logger)
warn: Microsoft.AspNetCore.Session.SessionMiddleware[7]
      Error unprotecting the session cookie.

Когда я добавил services.AddData.AddDataProtection().SetApplicationName("MyAppName"); к ConfigureServices(), теперь мы видим после развертывания

System.Exception: An error was encountered while handling the remote login. ---> System.Exception: Correlation failed.
   --- End of inner exception stack trace ---
   at Microsoft.AspNetCore.Authentication.RemoteAuthenticationHandler`1.HandleRequestAsync()
   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.Session.SessionMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.Session.SessionMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.Invoke(HttpContext context)
warn: Microsoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectHandler[15]
      '.AspNetCore.Correlation.OpenIdConnect.{SomeWeirdString}' cookie not found.

Я довольно долго гуглил, и кажется, что «правильный» способ исправить это - объединить ключи шифрования с .PersistKeysToFileSystem(). Есть ли альтернатива этому, хотя? например вообще отключить шифрование / защиту данных?

В некоторых случаях это приложение, которое мы находимся на последних этапах перехода с ASP.NET на ASP.NET Core, и ранее мы сохраняли наши состояния сеансов в Redis без шифрования.

1 Ответ

0 голосов
/ 27 апреля 2019

Стек защиты данных требуется и используется для защиты данных в файлах cookie, состоянии сеанса, временных данных и т. Д. Защита данных сохраняет ключ где-то для шифрования и дешифрования данных. Существует несколько вариантов сохранения ключей, по умолчанию используется файловая система или реестр. При размещении на локальном сервере в IIS или в Azure это обычно просто работает. Для других вариантов развертывания, особенно с использованием контейнеров, вам обычно необходимо выполнить некоторую настройку. Например, контейнеры обычно имеют временное хранилище, поэтому ключи шифрования теряются после развертывания нового экземпляра контейнера.

Как вы упомянули Redis, я предлагаю вам взглянуть на поставщика хранилища ключей Redis: https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/implementation/key-storage-providers?view=aspnetcore-2.2&tabs=visual-studio#azure-and-redis.

Следующие источники документации также хорошо читаются:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...