2011-11-10 9 views
23

複数のサブドメイン(example.com、blog.example.com、およびapp.example.com)にわたって共通の認証フォームを使用しています。ログインフォームに関係なく、それが示されているところのexample.comにこのデータを提出しなければならないので、私はCORSを使用するのではと思ったが、この:資格情報を使用したクロス・ソース・リソースの共有

header("Access-Control-Allow-Origin: http://example.com http://blog.example.com http://app.example.com") 

does not work

だから私は次の事をやって考えると、サーバー側で手動原点ヘッダをチェックし、要求がなされるかもしれないのでAccess-Control-Allow-Origin: *を許可するが、残念ながら、これはin the MDN

重要な注意をアップ作物:資格認定要求に応答するとき、サーバーは、ドメインを指定する必要があり、ワイルドカードを使用することはできません。

私の要求を複数のドメインで機能させる方法はありますか?それでもCORSを使用して認証情報を送信する方法はありますか?

+0

私はあなたにも、ドメイン名の間にコンマを置くことができると信じています。 (つまり、はい、複数のドメイン間で動作させることができます) – BrainSlugs83

+1

私はそうは思わない。仕様から: >実際には、元のリストまたはヌルの生産はより制約されます。空白で区切られた起点のリストを許可するのではなく、単一の起点か文字列 "null"です。 [source](https://www.w3.org/TR/cors/#access-control-allow-origin-response-header) – Nemo

答えて

34

つの思考:

1)あなたも含めている "とAccess-Control-Allow-Credentials:true" をヘッダ?これはCookieの資格情報を渡すために必要です(対応するXHRクライアントは.withCredentials = trueを設定する必要があります)

2)あなたのリンクからの提案を試したことがありますか?たとえば、「Origin:http://blog.example.com」というヘッダーが要求された場合は、「Access-Control-Allow-Origin:http://blog.example.com」という応答があり、起点のリストではありません。これには、サーバー側の実装でもう少し作業が必要です。

3)あなたは、さまざまなドメインで共有する必要がある単一のログインフォームがあると言います。標準のHTMLフォームの場合は、ドメイン間で定期的なフォーム投稿を行うことができます。 CORSを使用する必要はありません。投稿するURLにフォームの「アクション」プロパティを設定するだけです。たとえば:

<form name="login" action="http://login.example.com/doLogin"> 
+0

私は(2)を使い終わった。どういうわけか私は単一起源の方法を見落としていました。 – Nemo

1
// cross domain 
header("Access-Control-Allow-Origin: ".$_SERVER['HTTP_ORIGIN']); 
header('Access-Control-Allow-Credentials: true'); 
+6

Originヘッダーを厳密に検証せずにセキュリティホールを開けないでください – Tom

+3

この回答は、技術的な色でさえ、偽のセキュリティを持つことが不可能な理由を示しています!! >。< – BrainSlugs83

+0

OKこれは、 "本質的に"微妙なセキュリティホールを開くことができる "*"と同じように見えるので、推奨されません。http://stackoverflow.com/questions/12001269/what-are-the-セキュリティリスクの設定アクセスコントロールの許可元 – rogerdpack

関連する問題