我有一个 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 形式的身份验证是一种常见的设置吗?
请问有什么帮助吗?