PhoneGap应用程序中的ASP.NET身份验证是不可能的?

时间:2013-09-17 13:09:11

标签: asp.net authentication cookies cordova cors

我有一个phonegap应用程序从外部网址请求数据。其中一些数据受授权保护。我在asp.net webapi项目上实现了asp.net表单身份验证。我有一个授权方法和几种数据方法,其中一些方法要求您获得授权。

身份验证方法

    [HttpPost]
    [ActionName("authenticate")]
    public HttpResponseMessage Authenticate(LoginCredentials credentials)

需要认证的行动

    [HttpGet]
    [Authorize]
    public List<MediaItem> GetAllCatalogs() {

在本地/测试环境中运行时,一切都很好。当我部署webapi并从我的localhost访问它时,它会因跨域违规而中断。即使是不需要身份验证的呼叫。我的第一个解决方案是实现jsonp,它对于不需要身份验证的调用非常有用。我发现,我需要将withCredentials添加到xhrFields,但事实证明,使用jsonp时,不会发送标头,因为它不再是简单的ajax请求,而是不包含标头的脚本加载。从Authenticate方法返回的cookie不会随着对GetAllCatalogs的调用一起传递。

CORS救援?我通过允许*(EVERYBODY - yay!)来启用服务器上的CORS,结果证明withCredentials不允许与

一起使用
Access-Control-Allow-Origin: *

当我将*与localhost交换时,我可以让它在我的本地机器上运行。这很好,但是什么是phonegap应用程序的主机名?由于phonegap不依赖于带有域的http协议来加载其内部页面,因此它只是没有只是一个空字符串,它只是使用文件协议(文件) ://)

  

当然其他人遇到过这个问题?使用phonegap来   访问外部网址上的数据,需要以cookie形式进行身份验证   是一种常见的设置吗?

请帮忙吗?

1 个答案:

答案 0 :(得分:0)

事实证明,在混合Access-Control-Allow-Origin:*和withCredentials时,phonegap应用程序中的浏览器对于危险性非常无动于衷。一旦你在phonegap应用程序的xml配置中添加了所有人(*),它就不会抱怨并允许你进行x域调用。

配置在不同设备上略有不同,但如果你使用phonegap build,这个设置可以让你混合它:

<access origin="*" />