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

时间:2016-07-13 19:40:45

标签: c# asp.net authentication iis

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

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

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

  1. 原始网址:/ sitename / folder /?parameter1 = value& parameter2 = value
  2. IIS发出身份验证质询,经过身份验证的用户会显示在日志中 - 例如,domain \ user
  3. 然后请求文件夹/ Default.aspx(IIS中定义的默认页面)
  4. 处理
  5. Default.aspx.cs检查查询字符串,并通过Response.Redirect将请求路由到(例如)OtherPage.aspx。
  6. 请求OtherPage.aspx,并记录请求 - 没有身份验证,也没有质询
  7. OtherPage.aspx.cs崩溃(无用户凭据)
  8. 我试图理解ASP.NET甚至允许未经身份验证的文件请求的方式或原因。我试图在测试环境中重现行为,并且无法这样做。我怀疑“Intranet区域中的自动登录”可能已被禁用,或者存储的本地凭据可能存在但不知何故导致冲突,但这些情况都没有被淘汰。前执行导致身份验证尝试失败以及来自服务器的正确401响应(目标页面未在测试环境中触发)。

1 个答案:

答案 0 :(得分:0)

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

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

这不是" 100%解剖的原因"是因为这些用户以前访问过该站点,其中身份验证在常规访问站点时有效。确切地说,电子邮件消息链接如何禁止认证交换是未知的。目前,我推测一些安全设置会在源自电子邮件链接时禁止身份验证,除非特定站点URL 明确认证为受信任或Intranet站点。

感谢您的考虑。