用户代理标头的更改触发表单身份验证

发布于 2024-12-06 21:55:51 字数 880 浏览 1 评论 0原文

我有一个使用 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 容器的目的是允许您对 Word 文档进行修改,单击按钮将该 Word 文档与您的更改一起发布到我们的服务器,以便保存它。

ActiveX 控件(来自 www.ocxt.com 的 Office Viewer 组件)中有一个称为 HttpPost() 的方法,它将所查看文档的内容 POST 到服务器。

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

用户代理: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 在确定会话是否已通过身份验证时不考虑用户代理。

谢谢。

I've got an app built using ASP.NET MVC 3.0. It uses asp.net's built in forms authentication, without session state, and cookies on the browser to identify the user making requests.

Now, when I'm testing the app using IE9, the typical HTML request sends this user-agent in the header, and everything works fine.

User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)

However, we have one page in the app that has an ActiveX container that hosts Microsoft Word in the browser. The purpose of this ActiveX container is to allow you to make modifications to the word document, click on a button to POST that word document with your changes to our server so it can be saved.

There is a method in the ActiveX control--Office Viewer Component from www.ocxt.com--called HttpPost() that POSTs the contents of the viewed document to the server.

When you call HttpPost(), it sends all the same cookies properly, but uses a different User-Agent string.

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

The UserAgent using MSIE 5.5 string appears to cause ASP.NET or MVC to not send the request to the appropriate controller, but instead sends a redirect response to the Login page even though the cookie is correct for the session. I did a test with Fiddler, and tried using MSIE 6.0, 7.0, 8.0 and those seem to work fine, so specifically, 5.5 causes part of the server stack to redirect to login page.

This page used to work fine, so I'm not sure if something has changed in recent versions of ASP.NET/MVC, or is it because I've moved up to IE9.0, but basically, I'd like to know if it is possible to tell ASP.NET to not take the User-Agent into account when determining if a session has been authenticated already or not.

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

人海汹涌 2024-12-13 21:55:51

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

IIRC there was a change in ASP.NET 4.0 where Forms Authentication uses the user agent to detect whether it supports cookies and if it is not a recognized or unsupported user agent it simply doesn't use the authentication cookie. You will need to change the User Agent of the HTTP request.

把回忆走一遍 2024-12-13 21:55:51

如何禁用网络服务器的此默认行为以检查 web.config 中用户代理上的 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,如 Mac OS X)AppleWebKit/534.46(KHTML,如 Gecko)版本/5.1 Mobile/9B206 Safari/7534.48.3

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

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

但添加 cookieless="UseCookies " 属性将告诉 ASP.NET 使用任何内容的 cookie。

How to disable this default behavior for the webserver to check cookie support on the user agent in the web.config and force cookies for all browsers...

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

What's annoying about this default setting is that some valid User-Agent headers on new browsers will cause cookies to be ignored.

this User-Agent's form auth cookie is NOT ignored...

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

this User-Agent's form auth cookie IS ignored...

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

But adding the cookieless="UseCookies" attribute will tell ASP.NET to use the cookies from anything.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文