更改User-Agent标头触发表单身份验证

Lin*_*nus 5 asp.net asp.net-mvc activex

我有一个使用ASP.NET MVC 3.0构建的应用程序.它使用asp.net的内置表单身份验证,没有会话状态,并在浏览器上使用cookie来识别发出请求的用户.

现在,当我使用IE9测试应用程序时,典型的HTML请求会在标头中发送此用户代理,一切正常.

用户代理:Mozilla/5.0(兼容; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)

但是,我们在应用程序中有一个页面,其中包含一个在浏览器中托管Microsoft Word的ActiveX容器.此ActiveX容器的目的是允许您对单词文档进行修改,单击按钮以将该单词文档与您对服务器的更改进行POST,以便可以保存它.

ActiveX控件中有一种方法 - 来自www.ocxt.com的Office Viewer Component - 称为HttpPost(),它将查看文档的内容发布到服务器.

当您调用HttpPost()时,它会正确发送所有相同的cookie,但使用不同的User-Agent字符串.

User-Agent:Mozilla/4.0(兼容; MSIE 5.5; Windows NT 4.0)

使用MSIE 5.5字符串的UserAgent似乎导致ASP.NET或MVC不将请求发送到适当的控制器,而是向Login页面发送重定向响应,即使cookie对于会话是正确的.我使用Fiddler进行了测试,并尝试使用MSIE 6.0,7.0,8.0,这些似乎工作正常,因此具体来说,5.5会导致部分服务器堆栈重定向到登录页面.

这个页面以前工作正常,所以我不确定最近的ASP.NET/MVC版本是否有变化,或者是因为我已经升级到IE9.0,但基本上,我想知道如果可以告诉ASP.NET在确定会话是否已经过身份验证时不考虑User-Agent.

谢谢.

Dar*_*rov 6

IIRC在ASP.NET 4.0中有一个变化,其中Forms Authentication使用用户代理来检测它是否支持cookie,如果它不是已识别或不受支持的用户代理,则它根本不使用身份验证cookie.您需要更改HTTP请求的用户代理.

  • 达林,就是这样.在我发现MSIE 5.5导致问题之后,我查看了IIS,看看是否有一个设置忽略了旧浏览器的cookie,而且看得出来.具体来说,在身份验证下,有一个默认为"使用设备配置文件"的模式.我将其切换为"使用Cookies",现在请求工作正常. (2认同)