クロスドメインで Cookie を送信するときに気を付けること
Microsoft Azure を利用するときは注意。
- azurewebsites.net
- azure-mobile.net
- cloudapp.net
これら宛てにクロスドメインとして Cookie を送信する場合、Chrome とかは送信しないようにしているので注意。
気を付けることメモ
- 参照
- 呼び出される側は、Cookie や HTTP 認証データの送信を許可するかどうかを指定する=Credential
Cookie を送信したい場合は、以下のように設定する。(ASP.NET web.config にて)
<system.webServer> <httpProtocol xdt:Transform="Insert"> <customHeaders> <clear /> <add name="Access-Control-Allow-Credentials" value="true" /> ...
呼び出す側(クライアント側)で、Credential = true で送信する。
例えば jQuery の場合は以下のように。
$.ajax({ url: 'api/hoge/...', type: 'get', xhrFields: { withCredentials: true },
- 呼び出される側が Access-Control-Allow-Origin ヘッダを返していること
- Credentials を使う場合は、「*」ではない値を指定する。(ASP.NET web.config にて)
<system.webServer> <httpProtocol xdt:Transform="Insert"> <customHeaders> <clear /> ... <add name="Access-Control-Allow-Origin" value="http://hogehogehoge"/> ...
- Cookie の送信先のドメインが、Public Suffix List https://publicsuffix.org/ に含まれていないこと
- 上記のサイトから「THE LIST」> See the list で確認可能。
- Microsoft Azure の 以下のサービスは載っているので注意
- azurewebsites.net
- azure-mobile.net
- cloudapp.net
ちなみに IE11 は Cookie を送信していた。