使用iPhone UIWebView时的Asp.Net Forms身份验证
我正在编写一个使用Forms Authentication的Asp.net MVC 2应用程序,目前我的iPhone应用程序在通过Web进行身份验证/登录时遇到问题。 我们开发了一个使用UIWebView控件的简单iPhone应用程序。 在这个阶段,所有的应用程序都会导航到我们的Asp.Net网站。 很简单,对吧? 问题是,用户无法通过登录页面。 重现步骤是:
但是用户被重定向回登录屏幕!
我已经做了一些广泛的调试,我知道的是:
Cookie正在发送给客户端,客户端正在存储Cookie。 在iPhone调试器中验证了这一点,并使用Javsascript在页面上显示cookie数据。 该cookie正在被发送回服务器。 在Visual Studio调试器中进行了验证。 这是正确的cookie(与设置的cookie相同)。 User.Identity.IsAuthenticated属性由于某种原因返回false,即使auth cookie包含在Request对象中。 我已验证iPhone应用程序已设置为接受Cookie,并且它们位于客户端。
以下是有趣的事情:如果您在iPhone上打开Safari浏览器并直接访问我们的网站,它可以正常工作。
它在iPad上也有相同的行为,因为它不会超过登录屏幕。 这个仿真器和设备上的repros。
这个网站已经过IE 7-8,Safari(Windows),Blackberry,IEMobile 6.5,Phone 7的测试,并且可以找到。 它无法运行的唯一情况是iPhone应用程序中的UIWebView。
我有完全相同的问题,但与另一台设备(NokiaN8),并将问题追溯到用户代理。
IIS使用正则表达式来匹配User-Agent字符串。 问题的根源在于它没有针对特定设备的任何匹配的正则表达式,并最终以使用默认属性的最低级别匹配之一。 默认属性表示浏览器不支持cookies。
解:
App_Browsers
的Web项目中添加一个文件夹(右键单击该项目,选择: Add > Add ASP.NET Folder > App_Browsers
)。 Add > New Item
)。 该文件可以有任何名称,但必须有.browser
结尾。 Default
)。 两个例子:
<browsers>
<browser id="NokiaN8" parentID="Mozilla">
<identification>
<userAgent match="NokiaN8" />
</identification>
<capabilities>
<capability name="browser" value="NokiaN8" />
<capability name="cookies" value="true" />
</capabilities>
</browser>
</browsers>
或者更改默认值:
<browsers>
<browser refID="Default">
<capabilities>
<capability name="cookies" value="true" />
</capabilities>
</browser>
</browsers>
更多信息: 浏览器定义文件模式
我们找到的解决方案是创建一个文件(generic.browser)并包含此xml以告诉Web服务器“Mozilla”和默认浏览器设置都应该支持cookie。
<browser refID="Mozilla" >
<capabilities>
<capability name="cookies" value="true" />
</capabilities>
</browser>
这在ASP.NET 4.5中得到了解决,并且所有浏览器都被认为支持cookie,因此不需要额外的.browser文件。
链接地址: http://www.djcxy.com/p/42073.html上一篇: Asp.Net Forms Authentication when using iPhone UIWebView
下一篇: ASP.NET MVC 5 : Endless redirect to the login page using the site template