使用iPhone UIWebView时的Asp.Net Forms身份验证

我正在编写一个使用Forms Authentication的Asp.net MVC 2应用程序,目前我的iPhone应用程序在通过Web进行身份验证/登录时遇到问题。 我们开发了一个使用UIWebView控件的简单iPhone应用程序。 在这个阶段,所有的应用程序都会导航到我们的Asp.Net网站。 很简单,对吧? 问题是,用户无法通过登录页面。 重现步骤是:

  • 打开iPhone应用程序。
  • 该应用导航到主页。
  • 用户没有被认证,所以他们被重定向到登录屏幕/页面
  • 用户输入正确的用户名和密码。 点击提交。
  • 在服务器端,用户通过身份验证,并使用FormsAuthentication.GetAuthCookie生成cookie并将其发送到客户端。
  • 服务器发送重定向以将用户发送到正确的主页。
  • 但是用户被重定向回登录屏幕!

    我已经做了一些广泛的调试,我知道的是:

    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