Недавно я разработал веб-приложение 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?
Пожалуйста, нужна помощь !!