2013-07-25 11 views
10

セキュリティで保護された.netサーバーと通信するPhoneGapアプリケーションを開発しています。問題は、私はどんなリクエスト(W3C)でもクッキーを渡すことができないということです。PhoneGapのCookieヘッダー:安全でないヘッダー "Cookie"を設定することを拒否されました

これは私がやっていることです( "username"と "password"が動作すると仮定します)。

var token;  
$.ajax({ 
     url: "https://server.com/AuthService/api/account/login", 
     crossDomain: true, 
     type: 'post', 
     async: false, 
     data: { 
      username: "username", 
      password: "password" 
     } 
    }).done(function(response) { 
     token = response.securityToken; 
     success = true; 
    }); 

この時点で、すべての後続のリクエストを検証するために使用できる認証トークンがあります。だから、Chromeは

...

$.ajax({ 
    url: "https://server.com/Service/api/search?query=" + query, 
    headers: { Cookie: 'auth=' + token }, 
    crossDomain: true, 
    withCredentials: true, 
    type: 'POST', 
    async: false, 
    data: ' ' //because we don't want our request to be 0 bytes (the server is picky) 
}).done(function(data) { 
    result = data; 
}); 
を、私は、サーバーに別の要求を行い、そのトークンを使用すると、ちょうど言う:(W3C仕様に準拠)危険なヘッダー「クッキー」を設定することを拒否しました。アプリケーションは、承認クッキーが送信されないため、ヘッダーを設定し、結果としてリクエスト401sを設定しません。

私の質問はこれです:これを覆して、PhoneGapでCookieヘッダー(またはそれについて完全に行く別の方法)を上書きする方法はありますか? Authorizationヘッダーを使用することもオプションですが、サーバーへのアクセスが制限されており(サポートしていない)、より迅速な解決策が望まれます。

ボーナスの質問:AuthServiceを呼び出すと、デバイス上にhttpOnly Cookieが設定されている必要があります(ただし、これはドメイン間の要求であると推測しています)...私はこの前提で正しいですか何か間違ったサーバー側がありますか?

ありがとうございます!

答えて

5

短い答えはいいえ、Cookieヘッダーを設定することはできません。これは、Chromeがユーザーエージェントであるため、HTTP仕様でセキュリティの影響を受けるヘッダーの変更を禁止する必要があるためです。

解決策は、サーバーがXmlHttpRequestオブジェクトにCookieを設定できるようにするアクションを実行することです。あなたはすでにこれをやろうとしていると言いますが、うまくいきません。私はそれがあなたのajaxリクエストでCresentialsを設定する必要があるためだと思う。次のように、xhrFields属性を追加します。

var token;  
$.ajax({ 
    url: "https://server.com/AuthService/api/account/login", 
    crossDomain: true, 
    xhrFields: {withCredentials: true}, 
    type: 'post', 
    async: false, 
    data: { 
     username: "username", 
     password: "password" 
    } 
}).done(function(response) { 
    token = response.securityToken; 
    success = true; 
}); 

は今限り、そのCORSがドメイン(アクセス制御 - 許可 - 起源)許可として応答サーバは、ワイルドカードを送信しないよう、あなたはクッキーを受けるべきです。

+0

返信いただきありがとうございます。私は、私のニーズに適したAuthorizationヘッダーを選ぶことになった! – evancohen

+0

ありがとうございます、私はレスポンスヘッダ 'Set-Cookie'を' Secure'と 'httponly'属性で苦労していました。そして、フォローアップ要求に対して正しい' Cookie'を送り返しました。私はその間に 'nginx'プロキシを使用しています。これは、' $ http'が必要な適切な 'Access-Control'ヘッダを設定することを可能にしました。 – sampoh

関連する問題