如何使用51degrees检测库修复表单身份验证?

时间:2014-05-29 21:55:32

标签: asp.net asp.net-mvc 51degrees

我有一个现有的ASP.NET MVC应用程序,它使用基于表单的自定义身份验证,通过创建 FormsAuthenticationTicket 并根据http://msdn.microsoft.com/en-us/library/system.web.security.formsauthenticationticket(v=vs.110).aspx的示例编写auth cookie。

现在,当我添加对51degrees移动设备检测框架的引用时,我陷入了一个auth循环, context.Request.IsAuthenticated 永久报告 false

我已经跟踪了 context.Request.Browser.Cookies 现在还报告 false 的事实,这解释了为什么我的身份验证Cookie没有任何影响。但是什么会导致图书馆认为我的桌面浏览器(在这种情况下是Chrome,如果这有什么不同)突然不支持cookie?检测库中的错误?我的配置错误或代码错误?还有别的吗?

1 个答案:

答案 0 :(得分:1)

我刚刚使用nuget升级到51degree V3并遇到了同样的问题。

您是对的 - context.Request.Browser.Cookies是错误的,因此身份验证Cookie无法设置,即使有人也无法读取。我尝试使用FormsAuthentication.GetAuthCookie()然后使用Response.Cookies.Add()手动设置它,但它仍然无法正常工作。

我认为它是51degrees库中的一个错误。但我确实有一个解决方案。

根据MSDN,FormsAuthentication.CookiesSupported依赖于FormsAuthentication.CookieMode属性,该属性依赖于<forms cookieless="">属性。

默认情况下,如果未设置<form> cookieless属性,则默认为UseDeviceProfile,51degrees报告false,因此表单身份验证不会查看或设置饼干。

手动设置<form cookieless="UseCookies">强制FormsAuthentication.CookiesSupported为真,因此设置并读取身份验证Cookie。

我试过了,身份验证又重新开始了。

来源:http://msdn.microsoft.com/en-us/library/system.web.security.formsauthentication.cookiessupported(v=vs.110).aspx

- 编辑 - :<sessionState> system.web元素也有cookieless属性。默认情况下,它设置为UseCookies,因此使用会话Cookie的会话状态仍然有效。 资料来源:http://msdn.microsoft.com/en-us/library/h6bb9cz9(v=vs.100).aspx