ASP.NET 使用 Windows 身份验证处理站点中未经身份验证的文件请求:如何

本文关键字:身份验证 文件 请求 如何 使用 NET Windows 处理 站点 ASP | 更新日期: 2023-09-27 17:56:54

我对使用Windows身份验证的旧版 ASP.NET Web应用程序有一个奇怪的问题。特定页面正在崩溃,对该页面和站点日志的检查表明该页面正在崩溃,因为请求未正确进行身份验证 - IIS 未请求或 IE 11 未提供任何 Windows 标识。

该页面有一个奇怪的路径;它花了几分钟来解码它最初是如何组装的。初始请求不是针对特定页面的,而只是一个路由到 Default.aspx 的仅限文件夹的 URL。处理程序检查查询字符串并相应地重定向到特定页面。

对站点的初始请求已经过身份验证,如 IIS 站点日志所示。请求重定向到的页面(响应.重定向)进行身份验证。缺少 Windows 身份验证质询会使站点没有目标页面的自动标识,从而导致页面崩溃(取决于标识的代码失败)。顺序是这样的:

  1. 原始网址:/sitename/folder/?parameter1=value&parameter2=value
  2. IIS 发出身份验证质询,并且经过身份验证的用户显示在日志中 - 例如,域''用户
  3. 然后按文件夹/默认.aspx(IIS 中定义的默认页)处理请求
  4. 默认.aspx.cs检查查询字符串,并通过 Response.Redirect 将请求路由到(例如)OtherPage.aspx。
  5. 请求 OtherPage.aspx,并记录请求 - 没有身份验证,也没有质询
  6. 其他页面.aspx.cs崩溃(无用户凭据)

我试图理论化 ASP.NET 如何或为什么甚至允许未经身份验证的文件请求。我试图在测试环境中重现该行为,但无法做到这一点。我怀疑"在 Intranet 区域中自动登录"可能已被禁用,或者存储的本地凭据可能存在但不知何故导致冲突,但这两种情况都没有成功。前者确实导致身份验证尝试失败,并且服务器发出正确的 401 响应(在测试环境中未触发目标页面)。

ASP.NET 使用 Windows 身份验证处理站点中未经身份验证的文件请求:如何

对这个问题的进一步研究已经导致了一个解决方案,如果不是100%剖析原因的话。

遇到问题的用户通过电子邮件中的链接访问目标站点。由于某种未知原因,该链接禁止 IE 和 IIS 之间的凭据交换,直到站点 URL 被放置在 IE 的"本地 Intranet"站点列表中。这允许应用"仅在 Intranet 站点中自动登录"选项,这反过来又允许身份验证工作。

这不是"100%剖析"的原因是因为这些用户以前访问过该站点,其中身份验证在常规访问站点时起作用。电子邮件链接究竟如何禁止身份验证交换尚不清楚。目前,我推测某些安全设置在源自电子邮件链接时会禁止身份验证,除非特定站点 URL 被明确限定为受信任站点或 Intranet 站点。

感谢您的考虑。