0

我有一个使用表单身份验证的 Web 应用程序。我有一个不想重定向到登录表单的页面。我有这个页面:

<location path="service1.svc">
  <system.web>
    <authorization>
      <allow users="?"/>
    </authorization>
  </system.web>
</location>

据我了解,如果用户未经过身份验证(匿名)并且他们尝试访问 page1.svc,那么他们将不会被重定向到登录页面,但在我的应用程序中他们仍然是。

我在这里错过了什么吗?

4

1 回答 1

0

我想到了!Forms-authentication 模块的工作方式是检查 EndRequest 方法中的任何传出响应,如果状态码为 401(未授权),则将状态码更改为 320 并将其重定向到登录页面。在我的案例中发生的情况是,我有一个单独的模块,它在表单身份验证页面获取响应之前操纵响应,并且偶尔将状态代码设置为 401 以启动 ntlm 身份验证交换。但是在交换发生之前,forms-auth 拦截了它。

解决方法是使用 global.aspx 文件中的 EndRequest 方法将状态代码设置回 401,因为此时 forms-auth 已经对其进行了操作。在我的例子中,我没有首先将状态码设置为 401,而是将其设置为 407,然后在 endRequest 方法中将其捕获以将其更改回 401,并一起避免使用 forms-auth 模块。

于 2012-12-12T20:41:22.963 回答