#itfoxtec-identity-saml2
#itfoxtec-identity-saml2
Вопрос:
Я пытаюсь использовать ITfoxtec.Identity.Saml2.MVC Core в веб-приложении .NET Core 3.1 с использованием внутреннего IdP.
Он отлично работает на нашем тестовом сервере (Windows Server 2012, размещенный в IIS), но я не могу заставить его работать на любом другом сервере.
Вот что происходит:
Первоначальный вызов на веб-сайт правильно идентифицируется как вызов, не прошедший проверку подлинности, и пользователь отправляется на IdP, где пользователь входит в систему как обычно. Затем SAML-токен отправляется обратно в службу потребителей утверждений веб-приложений, где все выглядит так, как будто он выполняет то, что должен, saml2AuthnResponse .Статус имеет statuscode Saml2StatusCodes.Успешно, и в файле журнала указано «Схема аутентификации: saml2 выполнен вход». Затем он считывает параметр returnUrl и регистрирует что-то вроде «Выполнение RedirectResult», но затем он просто останавливается. Ничего в файле журнала, ничего в IIS-logs. Пользователь получает сообщение
This site can’t be reached
...
ERR_HTTP2_PROTOCOL_ERROR
Короче говоря, каждый контроллер, у которого есть атрибут [Authorize], выдает ошибку ERR_HTTP2_PROTOCOL_ERROR-error. Когда я удаляю все атрибуты [Authorize], приложение отлично работает, хотя и без аутентификации.
Я также попробовал пример TestWebAppCore-приложения от ITfoxtec.Страница github Identity.Saml2 выдает ту же ошибку. Он работает на нашем тестовом сервере 2012 года, но нигде больше.
Есть идеи, которые я могу попробовать?
Ответ №1:
Я думаю, вам нужно отследить вызовы, чтобы увидеть фактический http-запрос и ответы, отправляемые между браузером и сервером. Я обычно использую Fiddler для отслеживания запросов / ответов. Не забудьте включить Fiddler для отслеживания https.
Моя первая мысль заключается в том, что проблема может быть как-то связана с файлами cookie. Но это только предположение…
Ответ №2:
Возможно, вы что-то поняли, мы отключили http / 2 на сервере и вместо этого получили это сообщение:
Bad Request - Request Too Long
HTTP Error 400. The size of the request headers is too long.
Для SAML-данных используется 5 блоков cookie-файлов общим объемом 19941 байт, что слишком много. Я попытался заставить приложение сохранить данные сеанса в классических объектах сеанса, но, похоже, я не могу заставить его работать.
Это то, что я добавил в StartUp.cs:
В ConfigureService:
services.AddMvc()
.AddSessionStateTempDataProvider();
services.AddSession(options =>
options.Cookie.IsEssential = true
);
services.Configure<CookiePolicyOptions>(options =>
{
options.CheckConsentNeeded = context => false;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
В Configure:
app.UseSession();
Но он все равно заполняет заголовок файлами cookie. Что я делаю не так? Есть ли другой способ уменьшить сеансовые файлы cookie?