我有一个使用Forms身份验证的Web应用程序。我有一个页面,我不想重定向到登录表单。我有这个页面:
<location path="service1.svc">
<system.web>
<authorization>
<allow users="?"/>
</authorization>
</system.web>
</location>
根据我的理解,如果用户未经过身份验证(匿名)并且他们尝试访问page1.svc,那么他们就不会被重定向到登录页面,但在我的应用程序中他们仍然是。
我在这里错过了什么吗?
答案 0 :(得分:0)
我明白了! Forms-authentication模块的工作方式是它检查EndRequest方法中的任何传出响应,如果状态代码是401(未授权),则它将状态代码更改为320并将其重定向到Login Page。在我的情况下发生的事情是我有一个单独的模块在form-auth页面获取它之前操纵响应并偶尔将状态代码设置为401以启动ntlm身份验证交换。但是,在交换可能发生之前,form-auth拦截了它。
解决方法是使用global.aspx文件中的EndRequest方法将状态代码设置回401,因为forms-auth已经在这一点上操作了它。在我的情况下,不是首先将状态代码设置为401,而是将其设置为407,然后在endRequest方法中捕获它,将其更改回401并避免使用forms-auth模块。