身份验证完成后出现ERR_HTTP2_PROTOCOL_ERROR

时间:2020-10-19 15:35:44

标签: itfoxtec-identity-saml2

我正在尝试使用内部IdP在.NET Core 3.1 Web应用程序上使用ITfoxtec.Identity.Saml2.MvcCore。

它在我们的测试服务器(Windows Server 2012,由IIS托管)上运行良好,但我无法在其他任何服务器上运行。

这是发生了什么

该网站的初始呼叫被正确识别为未经身份验证的呼叫,并且该用户将被发送到IdP,在该IDd中,用户照常登录。然后将SAML令牌发布回Web应用程序断言消费者服务,其中一切似乎都按预期执行,saml2AuthnResponse.Status具有状态码Saml2StatusCodes.Success,并且日志文件显示“ AuthenticationScheme:saml2已登录”。然后,它读取ReturnUrl参数并记录“ Executing RedirectResult”之类的内容,但是它只是停止了。日志文件中没有任何内容,IIS日志中没有任何内容。该消息满足了用户

This site can’t be reached ... ERR_HTTP2_PROTOCOL_ERROR

简而言之,每个具有[Authorize]属性的控制器都会产生ERR_HTTP2_PROTOCOL_ERROR错误。当我删除所有[Authorize]属性时,即使没有身份验证,应用程序也可以正常运行。

我还尝试了ITfoxtec.Identity.Saml2的github页上的示例TestWebAppCore-application,它给出了相同的错误。它可以在我们的2012年测试服务器上运行,但在其他任何地方都无法运行。

有什么可以尝试的想法吗?

2 个答案:

答案 0 :(得分:0)

我认为您需要跟踪调用以查看实际的http请求和在浏览器和服务器之间发送的响应。我通常使用Fiddler来跟踪请求/响应。记住要启用Fiddler进行https跟踪。

我的第一个想法是问题可能与cookie有关。但这只是一个猜测...

答案 1 :(得分:0)

您可能正在尝试某些操作,我们在服务器上禁用了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;
});

在“配置”中:

app.UseSession();

但是它仍然用cookie填充标题。我究竟做错了什么?还有另一种方法可以减小会话Cookie?