2009-07-05 9 views
23

私は小さな問題があります。クロスドメインクッキー

複数のドメインにCookieを設定するにはどうすればよいですか?

私はセキュリティ上の問題を理解しており、これまでに行われていると確信しています。この理由はSSOです。

ie。

domain.com、 domain1.com、domain2.com :

account.domain.comは、ドメインがためにログインを設定する必要があります。

PHPやCookieなどの簡単な方法はありますか?

+0

ここにfacebookがそれをする方法を示すstackoverflowの別の投稿があります。はい、iframeとjavascriptで可能です。 http://stackoverflow.com/questions/4701922/how-does-facebook-set-cross-domain-cookies-for-iframes-on-canvas-pages – inorganik

+0

[HTTP状態管理メカニズムRFC6265](http:// tools。 ietf.org/html/rfc6265) – hakre

答えて

28

domain.comがdomain1.comのCookieを設定する方法はまったくありません。あなたがしようとしているのは、ユーザーのブラウザが各ドメインに要求を提出してから、独自のCookieを設定することによってのみ解決できます。

次に、各ドメインでユーザーの身元を確認する方法が必要です。これには、2つの方法があります。

  1. バックチャンネルは - サイトは、ユーザーがログインしているかどうかを判断するために互いに直接お問い合わせください
  2. GETやPOSTでトークンを渡す - ユーザーのbroweserがにリダイレクトされたとき他方のサイトは、アイデンティティおよびセッション状態を含むデジタル署名されたパラメータが渡される。

非常に複雑です。私はあなた自身をロールバックしないことをお勧めします。私が記述しているもののPHP実装のためにSimpleSAMLPHPを見てください。

+0

別の方法として、domain.comをdomain1.comに接続してトークンを取得し、そのトークンをJS呼び出しのヘッダーに渡すか別のフィールドとして渡すと、domain1.comはそのトークンをチェックする必要がありますそれに応じて対応します。それは理にかなっていますか? – Hafiz

5

が何をしようとしていることは行うことはできません。

オフサイト認証を使用する以外に、最も近いのは、サブドメイン間でCookieをアクセスできるようにすることです。 PHPのset_cookie関数のオプションの 'domain' arg。

5

これは、マスターのように動作する1つのドメインと、スレーブのような他のドメインを通じて実行できます。

domains.domain.comというドメインがあり、それが私たちのマスターだとします。

その後、我々はあなたがdomain.comにログオンします場合は、それが実際にサイトaccounts.domain.comことでしょう私たちの奴隷domain.comsomething.comanother.com

を持って、あなたがのためにユニークなIDとクッキーを取得しますあなたのブラウザは、domain.comのログオン後のランディングページ(つまり、domain.com/logon?check=true&unique-id=<browser unique id>&request-id=<unique request ID>)にリダイレクトされます。ランディングページはaccounts.domain.comに連絡し、ブラウザIDで照会します。トランザクションが正常であれば、ログオンCookieをdomain.comから取得します。

次に、すべてのドメイン(domain.comsomething.comanother.com)はaccounts.domain.com/roaming-check?return-url=<URL the redirect was initiated from>にリダイレクトされます。私たちは家に帰っているので(私たちはすでにaccounts.domain.comにログオンしています)、着陸ページ(<domain name>.com/logon?check=true&unique-id=<browser unique id>&request-id=<unique request ID>)に再度リダイレクトされます。この時点からログオンしている部分と同じです。私たちは別のドメインにシームレスにローミングしています(ブラウザは通常、リダイレクトされたページがヘッダーsend(サーバー)/ receive(ブラウザー)セクションを通過するまで表示されません)。

実際にアクティブなログオンがない場合、サイトはこの「否定的なログオン」をセッションに保存し、ログオンを確認しないでください(ログオンまたは別のドメインを読み込むまで)。