Предыстория
У нас есть приложение ASP.Net Core, которое находится в разработке в течение последнего года. Недавно мы преобразовали наше приложение с VS 2015 на VS 2017. Поэтому мы перешли с проекта на основе json на проект на основе csproj. Мы также обновили .NET Core runtime framework to 1.1.2.
Приложение использует централизованное IdentityServer3 для аутентификации с помощью OpenIDConnect.
После преобразования мы опубликовали приложение на нашем сервере разработки. Приложение размещено в IIS. Итак, мы установили на сервере разработки следующее:
- Microsoft .NET Core 1.1.2 — среда выполнения (x64)
- Microsoft .NET Core 1.0.5 и 1.1.2 — серверный хостинг Windows
На сервере разработки все прошло нормально, и мы протестировали приложение без каких-либо проблем.
Затем мы устанавливаем тот же .Net Core framework 1.1.2 и хостинг Windows Server на рабочем сервере. И скопируйте ту же опубликованную папку с сервера разработки на рабочий сервер и соответствующим образом обновите appsettings.json.
ПРОБЛЕМА
В рабочей среде, когда мы входим в систему, сервер идентификации входит в бесконечный цикл аутентификации. Fiddler показывает несколько переходов от identityServer к веб-сайту. Каждое обращение туда и обратно продолжает добавлять .AspNetCore.OpenIdConnect.Nonce и .AspNetCore.Correlation.oidc в файлы cookie, и в конечном итоге я получаю ошибку неверного запроса из-за максимального размера запроса.
Есть несколько сообщений (здесь здесь, здесь, здесь) по той же проблеме. И решение состоит в том, чтобы понизить версию Microsoft.Owin.Security.OpenIdConnect до 3.0.0
Однако мое клиентское приложение не является классическим приложением ASP.NET, а приложением ASP.NET Core, которое использует Microsoft.AspNetCore.Authentication.OpenIdConnect 1.1.2. Также обратите внимание, что оно работает на сервере разработки с тот же централизованный сервер идентификации 3 и та же версия Microsoft.AspNetCore.Authentication.OpenIdConnect 1.1.2
Итак, я предполагаю, что следующее может быть неправильным:
- Возможно, я забыл что-то установить на рабочий сервер (у меня наверняка установлена среда выполнения .NET Core 1.1.2 и хостинг Windows Server, я не уверен, что мне нужно устанавливать что-то еще на рабочем сервере)
- Возможно, я неправильно настроил IIS (но что?)
- На рабочем сервере Как узнать, под какой версией работает приложение. (в Visual Studio в .csproj это
<TargetFramework>netcoreapp1.1</TargetFramework>, но как узнать, какую версию использует опубликованный код) - Единственная разница между сервером разработки и рабочим сервером заключается в том, что на сервере разработки установлена классическая версия .NET Framework
4.7, а в рабочей среде — классическая версия .NET Framework4.6.2. Однако я думаю, что это не должно вызывать проблем, потому что приложение представляет собой приложение ASP.NET Core, а не классическое приложение .NET Framework.
Я исчерпан всеми идеями, любая помощь будет очень признательна