web-dev-qa-db-ja.com

認証情報を使用したクロスオリジンリソース共有

複数のサブドメイン(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")

機能しない

そこで、次のことを考えて、サーバー側でOriginヘッダーを手動で確認し、Access-Control-Allow-Origin: *リクエストが行われる可能性がありますが、残念ながらこれが発生します MDNで

重要な注意:認証されたリクエストに応答するとき、サーバーはドメインを指定する必要があり、ワイルドカードを使用できません。

複数のドメインでリクエストを機能させ、CORSを使用して資格情報を送信する方法はありますか?

28
Nemo

2つの考え:

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)もう1つの考えとして、さまざまなドメインで共有する必要がある単一のログインフォームがあると述べています。まあ、それが標準のHTMLフォームであれば、ドメイン間で通常のフォームポストを行うことができます。 CORSを使用する必要はありません。フォームの「アクション」プロパティを、投稿したいURLに設定するだけです。例えば:

<form name="login" action="http://login.example.com/doLogin">
41
monsur
// cross domain
header("Access-Control-Allow-Origin: ".$_SERVER['HTTP_Origin']);
header('Access-Control-Allow-Credentials: true');
0
user3986068