0

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

认证方式

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

以及需要身份验证的操作

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

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

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

Access-Control-Allow-Origin: *

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

其他人肯定遇到过这个问题吗?使用 phonegap 访问外部 url 上的数据,需要 cookie 形式的身份验证是一种常见的设置吗?

请问有什么帮助吗?

4

1 回答 1

0

事实证明,phonegap 应用程序中的浏览器对混合 Access-Control-Allow-Origin: * 和 withCredentials 时的危险漠不关心。一旦您在 phonegap 应用程序的 xml 配置中添加了所有人 (*),它就不会抱怨并让您进行 x 域调用。

不同设备上的配置略有不同,但如果您使用 phonegap 构建,这是允许您混合使用的设置:

<access origin="*" />
于 2013-09-23T07:06:59.333 回答