【发布时间】:2016-07-13 19:40:45
【问题描述】:
我对使用 Windows 身份验证的旧版 ASP.NET Web 应用程序有一个奇怪的问题。特定页面正在崩溃,对页面和站点日志的检查表明该页面正在崩溃,因为请求未正确验证 - IIS 未请求或由 IE 11 提供任何 Windows 身份。
页面有一条奇怪的路径;花了几分钟来解码它最初是如何组装的。初始请求不是针对特定页面,而仅仅是路由到 Default.aspx 的仅文件夹 URL。处理程序检查查询字符串并相应地重定向到特定页面。
对站点的初始请求已通过身份验证,如 IIS 站点日志所示。请求被重定向到的页面 (Response.Redirect) 不会进行 身份验证。缺少 Windows 身份验证质询会使站点无法自动识别目标页面,从而导致页面崩溃(取决于身份的代码失败)。顺序是这样的:
- 原始网址:/sitename/folder/?parameter1=value¶meter2=value
- IIS 发出身份验证质询,并且经过身份验证的用户显示在日志中 - 例如域\用户
- 然后由文件夹/Default.aspx(IIS 中定义的默认页面)处理请求
- Default.aspx.cs 检查查询字符串,并通过 Response.Redirect 将请求路由到(例如)OtherPage.aspx。
- 请求了 OtherPage.aspx,并记录了该请求 - 没有身份验证,也没有质询
- OtherPage.aspx.cs 崩溃(无用户凭据)
我试图从理论上解释 ASP.NET 如何或为什么甚至允许未经身份验证的文件请求。我试图在测试环境中重现该行为,但无法这样做。我怀疑“Intranet 区域中的自动登录”可能已被禁用,或者存储的本地凭据可能存在但不知何故导致了冲突,但这些情况都没有解决。前一个确实导致失败的身份验证尝试和来自服务器的正确 401 响应(目标页面未在测试环境中触发)。
【问题讨论】:
-
“路线”是什么意思? 302重定向?还有,用的是ntlm还是kerberos?
-
我已经修改了文本以回答“route/302”问题。我还没有进行线路跟踪来确定 NTLM 与 Kerberos。
标签: c# asp.net authentication iis