1

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

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

这就是发生的事情:

对网站的初始调用被正确识别为未经身份验证的调用,并且用户被发送到用户照常登录的 IdP。然后将 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-page 中的示例 TestWebAppCore-application,它给出了相同的错误。它在我们的 2012 测试服务器上工作,但在其他地方没有。

我可以尝试任何想法吗?

4

2 回答 2

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 的内容:

在配置服务中:

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 更小?

于 2020-11-16T12:00:38.947 回答
0

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

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

于 2020-10-20T18:40:49.457 回答