0

外部 URL からデータを要求する phonegap アプリがあります。そのデータの一部は承認によって保護されています。asp.net webapi プロジェクトに asp.net フォーム認証を実装しました。私は承認メソッドといくつかのデータ メソッドを持っていますが、一部は承認が必要です。

認証方法

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

認証が必要なアクション

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

すべてをローカル/テスト環境で実行すると、すべてうまく機能します。webapi をデプロイしてローカルホストからアクセスすると、クロス ドメイン違反が原因で中断します。認証を必要としない呼び出しでさえ。私の最初の解決策は、jsonp を実装することでした。これは、認証を必要としない呼び出しに最適でした。xhrFieldsにwithCredentialsを追加する必要があることがわかりましたが、jsonpではヘッダーが送信されないことがわかりました。これは、単純なajaxリクエストではなく、ヘッダーを含まないスクリプトロードであるためです。Authenticate メソッドから返された Cookie は、GetAllCatalogs の呼び出しと共に渡されませんでした。

CORSが助けになりますか?* (EVERYBODY - yay!) を許可することで、サーバーで CORS を有効にしました。

Access-Control-Allow-Origin: *

* を localhost と交換すると、ローカル マシンで実行できます。それは素晴らしいことですが、phonegap アプリのホスト名は何ですか? phonegap は内部ページをロードするためにドメインの http プロトコルに依存せず、単純にファイル プロトコル (file://) を使用するため、単なる空の文字列ではないことがわかります。

確かに他の人がこの問題に遭遇しましたか?phonegap を使用して外部 URL のデータにアクセスし、Cookie 形式での認証を要求するのは一般的な設定ですか?

何か助けてください。

4

1 に答える 1

0

It turns out, the browser in phonegap apps are pretty indifferent about the dangers when mixing Access-Control-Allow-Origin: * and withCredentials. Once you add everybody (*) in the xml config in your phonegap app, it won't complain and let you make the x-domain calls.

The config is a little different on the different devices, but if you use phonegap build, this is the setting that will allow you to mix it:

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