我有一个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形式进行身份验证 是一种常见的设置吗?
请帮忙吗?
答案 0 :(得分:0)
事实证明,在混合Access-Control-Allow-Origin:*和withCredentials时,phonegap应用程序中的浏览器对于危险性非常无动于衷。一旦你在phonegap应用程序的xml配置中添加了所有人(*),它就不会抱怨并允许你进行x域调用。
配置在不同设备上略有不同,但如果你使用phonegap build,这个设置可以让你混合它:
<access origin="*" />