【问题标题】:Change in User-Agent header triggering forms authentication触发表单身份验证的 User-Agent 标头的更改
【发布时间】:2011-09-27 14:17:33
【问题描述】:

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

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

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

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

在 ActiveX 控件(www.ocxt.com 中的 Office 查看器组件)中有一个名为 HttpPost() 的方法,它将查看的文档的内容发布到服务器。

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

用户代理:Mozilla/4.0(兼容;MSIE 5.5;Windows NT 4.0)

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

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

谢谢。

【问题讨论】:

    标签: asp.net asp.net-mvc activex


    【解决方案1】:

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

    【讨论】:

    • 达林,就是这样。在我发现 MSIE 5.5 导致了这个问题后,我查看了 IIS,看看是否有一个设置忽略了旧浏览器的 cookie,你瞧,确实有。具体来说,在身份验证下,有一个默认为“使用设备配置文件”的模式。我将其切换为“使用 Cookies”,请求现在可以正常工作了。
    【解决方案2】:

    如何在 web.config 中为 web 服务器禁用此默认行为以检查用户代理上的 cookie 支持并强制所有浏览器使用 cookie...

    <system.web>
        <authentication mode="Forms">
            <forms cookieless="UseCookies" />
        </authentication>
    </system.web>
    

    这个默认设置令人讨厌的是,新浏览器上的一些有效的 User-Agent 标头会导致 cookie 被忽略。

    此用户代理的表单身份验证 cookie 不会被忽略...

    Mozilla/5.0 (iPad; CPU OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B206 Safari/7534.48.3

    此用户代理的表单身份验证 cookie 被忽略...

    Mozilla/5.0 (iPhone; CPU iPhone OS 6_0_1 like Mac OS X; en-us) AppleWebKit/536.26 (KHTML, like Gecko) CriOS/23.0.1271.91 Mobile/10A523 Safari/8536.25

    但是添加 cookieless="UseCookies" 属性会告诉 ASP.NET 使用任何东西的 cookie。

    【讨论】:

      猜你喜欢
      • 2021-10-24
      • 1970-01-01
      • 2015-09-09
      • 2017-02-18
      • 1970-01-01
      • 1970-01-01
      • 2019-02-21
      • 2013-09-25
      • 2019-01-10
      相关资源
      最近更新 更多