over 6 years ago

在开发Mobile应用时,碰到一个问题。当请求一个需要认证的资源时,会先被重定向到一个登陆页面,在登陆后,这个Request就被标记为Authenticated的了,同时这个Response会有ASP.NET默认的.ASPXAUTH认证Cookie。然后再次重定向到初始访问的资源,这个Request会附带上这个auth cookie。一个标准的ASP.NET认证流程。

但是碰到的实际情况是,这个Request始终停留在登陆页面,要求你不停的输入登陆信息。查看IIS Log和Debug,都可以看到这个Request有正确的Cookie信息,但是ASP.NET就是不把这个Request标记为认证的。

那么问题究竟处在哪里呢?问题就在ASP.NET辨别浏览器的方式上。ASP.NET根据浏览器的User Agent和.net framework config文件里的.Browser文件来判断当前浏览器是什么,是不是支持Cookie等。ASP.NET 4把来自UIWebView的Request认当作来自Mozilla的Request。而定义Mozilla特性的generic.browser文件中设置了,<capability name="cookies" value="false" />. 因此auth cookie就被直接忽律了,认证就失败了。

解决方法就是在项目中,添加一个ASP_Browsers文件夹。添加一个generic.browser文件,

 <browser refID="Mozilla" >
<capabilities><capability name="cookies"  value="true" /></capabilities>
</browser>
<browser refID="Default">
<capabilities><capability name="cookies" value="true" /></capabilities>
</browser>

再试试,认证就成功了。

← 在Lion上安装wget Finished Reading Steve Jobs →