我有一个页面“Download.aspx”,需要Windows身份验证。当用户登录时,会向他们显示他们可以下载的文件的链接列表。链接实际上指向“ZipHandler.ashx”处理程序,该处理程序根据传递的参数处理请求。
我的问题是,当经过身份验证的用户访问该处理程序时,HttpContext.Current.User.Identity.IsAuthenticated
false
ProcessRequest
方法内IHttpHandler
为HttpContext.Current.User.Identity.IsAuthenticated
。
我需要检查它们是否在IHttpHandler中进行了身份验证,因为未经身份验证的用户也可以访问具有不同结果的处理程序。我在“Download.aspx”页面中测试了true
的值,值为{{1}},所以我不明白为什么这不是ashx处理程序的情况。我已经尝试将IReadOnlySessionState和IRequiresSessionState接口添加到我的处理程序中,但我仍然遇到同样的问题。
答案 0 :(得分:2)
问题是.ashx处理程序允许匿名访问,但如果处理程序允许匿名访问,Windows身份验证甚至不会传递WindowsIdentity
。我所做的是在web.config中创建2个处理程序条目,指向同一个处理程序类:
<add name="AnonymousHandler" verb="GET" path="*/AnonymousHandler.ashx"
type="MyLibrary.MyHandler, MyHandler, Version=1.0.0.0, Culture=neutral,
PublicKeyToken=12e530ccad45314d"/>
<add name="AuthenticatedHandler" verb="GET" path="*/AuthenticatedHandler.ashx"
type="MyLibrary.MyHandler, MyHandler, Version=1.0.0.0, Culture=neutral,
PublicKeyToken=12e530ccad45314d"/>
然后我拒绝匿名访问经过身份验证的版本:
<location path="AuthenticatedHandler.ashx">
<system.web>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</location>