asp.net - 标头传输编码:分块并请求为空
问题描述
这是一个基于 .net 框架 4.6 的基于 Webforms 的 asp.net 应用程序。在通过 SAML 执行 IdP 发起的 SSO 时,我们遇到了一些用户出现间歇性登录问题的问题。原因是在我们的侧应用程序上进行登录尝试时,请求正文中没有 SAML 响应(IdP 将 saml 响应发布到给定的 url)。
因此,我们使用 SAML 消息解码器扩展进行故障排除,发现 SAML 响应实际上是可用的,但它没有到达我们的应用程序请求对象。所以我们试图通过以下方式转储请求中的所有内容;
if (!Page.IsPostBack)
{
using (StreamWriter sw = new StreamWriter(pathxx))
{
using (Stream receiveStream = Request.InputStream)
{
using (StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8))
{
xxx += readStream.ReadToEnd();
}
}
sw.WriteLine(xxx);
}
}
这证实了即使 SAML 消息解码器显示 SAML 响应,SAML 响应也没有到达应用程序。所以基本上我们的合作伙伴方面是清楚的。他们正在发送我们需要的东西。
进一步挖掘表明,只要我们没有得到 SAML 响应,响应标头就会有 Transfer Encoding:Chunked 并且没有 Content-Length。这发生在 Chrome 和 Edge 中。Firefox 这不是问题。
有很多相关问题,但我找不到可靠的技术答案为什么会发生这种情况,无论这是浏览器还是 Web 服务器的故障(我们在 IIS 8.5 和 IIS 10 上)。有没有人在 ASP.Net 网站上遇到过这个问题并得到解决?
解决方案
一般因为在aspx中增加了控制功能,所以重点处理请求的全生命周期处理和页面的渲染。
而ashx专注于请求处理,但它只有一个ProcessRequest方法,所以更多用于处理ajax调用。
在SAML SSO中,我注意到 SAML SSO 的工作原理是将用户的身份从一个地方(身份提供者)转移到另一个地方(服务提供者)。这是通过交换数字签名的 XML 文档来完成的。
ashx中有一个Generic Handler,用于在不创建HTML内容的情况下执行特定的任务,在处理XML内容时比aspx有优势。
推荐阅读
- excel - 更改单元格颜色后 Excel 崩溃
- swift - 有没有更有效的方法可以在 swift 5 中组合日期和时间?
- microsoft-teams - 如何通过 API 查询 MS Teams 设备的状态?
- javascript - 如何每分钟自动打开一个新选项卡并关闭除 chrome 中的新选项卡以外的所有其他选项卡?
- java - 是否打算彻底检查现有的 Java 平台类(JEP 360)?
- javascript - AngularJS的ng-repeat in line,逗号分隔,两个属性在同一行
- dbt - 为正值编写 dbt 测试
- node.js - 使用 passport.js 注册后出现错误的请求错误
- angular - 添加 ngAfterViewChecked 后,scrollTop 不起作用
- spring-boot - SpringDoc (spring boot) utf-8 json 标头响应文档