Развертывание ядра 2.0 в asp.net - InvalidOperationException: не удалось расшифровать маркер защиты от подделки - PullRequest
0 голосов
/ 31 мая 2018

Недавно я разработал веб-приложение asp.net core 2.0 в своей компании, и в режиме отладки он отлично работает, однако, когда я развернул наш тестовый сервер в IIS и попытался выполнить его с клиентского компьютера, он столкнулся с проблемой:

An unhandled exception occurred while processing the request.
CryptographicException: The key {0851ad3b-df33-4cf7-8c3a-5c637adaa713} was not found in the key ring.
Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.UnprotectCore(Byte[] protectedData, bool allowOperationsOnRevokedKeys, out UnprotectStatus status)

InvalidOperationException: The antiforgery token could not be decrypted.
Microsoft.AspNetCore.Antiforgery.Internal.DefaultAntiforgeryTokenSerializer.Deserialize(string serializedToken)

Проблема начинается, когда я отправляю страницу входа.Я исследовал ссылки с такими же проблемами здесь и в других блогах, но обнаружил, что это должно быть с ValidateAntiForgeryToken, а решение связано с Microsoft.AspNetCore.DataProtection.Я добавил пакет nuget Microsoft.AspNetCore.DataProtection.Redis в свой проект и добавил в ConfigureServices класса запуска следующий код:

    var redis = ConnectionMultiplexer.Connect("192.168.10.151:80");
    services.AddDataProtection().PersistKeysToRedis(redis, "DataProtection-Keys");
    services.AddOptions();

ip нашего сервера тестирования - 192.168.10.151, однако приложение выдает следующее исключение:

RedisConnectionException: It was not possible to connect to the redis server(s); to create a disconnected multiplexer, disable AbortOnConnectFail. InternalFailure on PING

¿Почему он не подключается, поскольку разрешается на том же сервере веб-приложений?¿Где находится база данных DataProtection-Keys?

в качестве обходного пути, я изменил метод с помощью PersistKeysToFileSystem следующим образом:

services.AddDataProtection()
                .SetApplicationName("myapp-portal")
                .PersistKeysToFileSystem(new System.IO.DirectoryInfo (@"c:\ProgramData\dpkeys"));

Однако при запуске приложения на тестовом сервере 192.168.10.151, когда форма входа в системуотправлено, возвращается на страницу входа.При проверке файла журнала stdout отображаются только:

Среда размещения: корневой путь к производственному контенту: C: \ inetpub \ wwwroot \ OmniPays. Прослушивание: http://localhost:30064 Приложение запущено.Нажмите Ctrl + C, чтобы завершить работу.

Проверка сетевых сообщений с помощью инструментов разработчика chrome Я заметил кое-что:

URL-адрес запроса: http://192.168.10.151/OmniPays/Account/Login Метод запроса: Код состояния POST: 302 Найдено удаленноеАдрес: 192.168.10.151:80 Политика реферера: no-referer-when-downgrade

, а затем ...

URL запроса: http://192.168.10.151/OmniPays/Home/Main Метод запроса: GET Код состояния:302 Найден удаленный адрес: 192.168.10.151:80 Политика реферера: no-referrer-when-downgrade

Действие LoginController для входа в систему перенаправляет запрос на основное действие HomeController только в случае успешной аутентификации, а основное действие имеет атрибут [Authorize].По некоторым причинам, которые я не могу понять, главное действие завершается неудачно и возвращаются на страницу входа.URL в chrome показывает: http://192.168.10.151/OmniPays/Account/Login?ReturnUrl=%2FOmniPays%2FHome%2FMain

Я использую Microsoft Identity.В режиме отладки работает нормально, и если я развернуть приложение на моем локальном компьютере на IIS, также работает нормально.¿Может быть, на сервере отсутствует какой-либо SDK?

Пожалуйста, нужна помощь !!

1 Ответ

0 голосов
/ 05 июня 2018

Решение найдено!причина проблемы была не в IIS, ни в Сервере, при подключении к серверу используется http, а не https, нет никаких сертификатов, подтверждающих безопасное соединение, однако тестирование приложения на разных серверах работает нормально, поэтому я был очень разочарован.Решение состояло в том, чтобы удалить куки-файлы и любые данные, связанные с этим URL-адресом, указывающим на сервер разработки (с ошибкой) во всех браузерах, данные, которые ранее были сохранены, и вуаля !!, теперь приложение работает отлично.По умолчанию, так как bhmahler комментирует защиту данных в памяти, и я оставил конфигурацию по умолчанию, я имею в виду не явное сохранение в redis или PersistKeysToFileSystem и работает нормально, однако важно установить для DataProtection надежную защиту, чувствительную к данным.

Я новичок в этих темах, и невероятно, что такая простая вещь вызвала у меня пустую трату времени.Спасибо всем!

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