2013-04-23 9 views
8

CORSとAngular.jsを使用してNode.jsを使用して簡単なログインを行っています。 client.example.comが作っているNode.js Angular.jsを使用したCORSセッションクッキー

---成功した場合にセッションクッキーがあまりにclient.example.comを返され、あまりにものアクセスを得ることができPOSTすぎapi.example.com/loginは、セッションCookieによって保護さapi.example.com/secretようサービスをGET。

セッションCookieで保護されていないGETリクエストを作成することは問題にはなりません。

最終的に、目標はここにある、あまりにもauthenticate a client side app to a REST api using CORS with a local stradegy ---つまり、ユーザ名&パスワード---でもイマイチ上記の規則可能な場合。

私はどこからでも学ぶための実用的なインパメントを見つけることができません。正しい方向に向いていますか?

ボーナス:実例を示します。

+0

これは、Cookieのドメインを.example.comに設定した場合にのみ可能です。 api.example.comからclient.example.comのクッキーを設定することはできません:http://stackoverflow.com/questions/1062963/how-do-browser-cookie-domains-work – alexwen

+0

@alexwenどのドメインからでも、 'client.example1.com'と' client.example2.com'のように。ここでの目標は、CORSとローカルスレーブを使用しているREST API、つまり 'username'と' password'もクライアントサイドのアプリでもあまりにも認証されています。 –

答えて

2

問題は非常に簡単です。ブラウザは、あるドメインに設定されたCookieを別のドメインに送信することを許可していません。
セキュリティのためです。あなたのセッションクッキーがどんなドメインからでもアクセス可能だったなら、どのサイトもcsrfを実行できます(定義上、csrfを実行することです - 別のサイトのあるサイトからセッションを使用する)。

周囲にはさまざまな方法がありますが、適用する際は注意が必要です。

  • 最も簡単な方法は、Jsonpを使用してログインしてクロスドメイン要求を行うことです.jsonpは基本的にCookieのクロスドメインポリシーを破棄します。

  • あなたはapi.example.comに座っclient.example.comページ内のiFrame、親とiframeがpost messageを使用して通信することができますを埋め込むことができます。

どちらの方法は、CSRF要求(その性質上)に開かれているので、あなたは、あなたがアクセスするclient.example.comを許可するどのような情報に余分な注意する必要があります。

関連する問題