> ## Documentation Index
> Fetch the complete documentation index at: https://translations.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> SameSite Cookie 属性などのブラウザーの変更が、サードパーティ ドメインのコンテンツを埋め込むお使いの Web アプリケーションにどのような影響を及ぼすかを説明します。

# SameSite Cookie 属性の変更

認証やセッションの維持に使用される Cookie は、属性を設定することで保護できます。Auth0 では、次の用途で Cookie を使用します。

* OIDC Enterprise の `form_post`
* <Tooltip tip="Security Assertion Markup Language (SAML): パスワードなしで 2 者間で認証情報を交換できるようにする標準化されたプロトコル。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=SAML">SAML</Tooltip> HTTP-POST バインディング
* Web メッセージ (`checkSession` とも呼ばれます)

<div id="samesite-attributes">
  ## SameSite 属性
</div>

ブラウザーの動作を制限するために、`set-cookie` HTTP レスポンスヘッダーに [SameSite Cookie](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite) 属性を追加できます。これにより、HTTP リクエストを引き起こした操作の種類に応じて、ブラウザーが Cookie の `key=value` ペアを送信しないようにできる場合があります。

使用できる属性値は次のとおりです。

| Attribute | Description                                                                                                 |
| --------- | ----------------------------------------------------------------------------------------------------------- |
| `strict`  | ユーザーが Web サイトのオリジンの範囲内を移動している場合に Cookie を送信します                                                              |
| `lax`     | ユーザーがドメイン間を移動している場合に Cookie を送信しますが、サードパーティコンテキスト (iframe または POST) では送信しません                                |
| `none`    | Web サイトのオリジンの範囲をまたぐリクエストでも Cookie を送信します。ただし、他の条件がある場合 (たとえば、サードパーティ Cookie がブロックされている場合) は、Cookie を送信しません。 |

見覚えのある Cookie 属性には、次のようなものがあります。

| Attribute           | Description                                                                                                            |
| ------------------- | ---------------------------------------------------------------------------------------------------------------------- |
| `httpOnly`          | Cookie を HTTP リクエストでのみ送信できるようにします。Javascript の `document.cookie` では読み取れません                                             |
| `secure`            | ブラウザーが安全なコンテキストに対してのみ Cookie を送信できるようにします。コンテキストが安全と見なされるかどうかはブラウザーに依存しますが、通常は HTTPS の使用が必要です                          |
| `max-age / expires` | Cookie が **session** Cookie (たとえば、ブラウザーがセッションを終了すると破棄される) か、**persistent** か (たとえば、Cookie がブラウザーセッションを超えて保持される) を制御します |

ブラウザーはこれを受け取るとヘッダーを解析し、それに応じて Cookie jar を更新します。

<div id="browser-cookie-changes">
  ## ブラウザーのCookieに関する変更
</div>

2020年2月以降、Google Chrome v80 では Cookie の扱い方が変更されました。これに伴い、Auth0 でも Cookie の扱いに関して次の変更を実装しました。

* `SameSite` 属性が設定されていない Cookie は、`lax` に設定されます
* `SameSite=none` が設定された Cookie は保護されている必要があります。保護されていない場合、ブラウザーの Cookie jar に保存できません

これらの変更の目的は、セキュリティを向上させ、CSRF 攻撃のリスク軽減に役立てることです。

これらの変更は、次の Cookie に影響します。

* `auth0` (ユーザーのセッションを管理)
* `auth0-mf` (<Tooltip tip="多要素認証（MFA）: SMS によるコードなど、ユーザー名とパスワードに加えて認証要素を使用するユーザー認証プロセス。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=multi-factor+authentication">多要素認証</Tooltip> に関連する情報を管理)
* `did` (デバイス/ユーザーエージェントの識別子)

これらの Cookie に対して、Auth0 は次の対応を行います。

* `SameSite` 属性を `none` に設定し、その Cookie では HTTPS の使用を必須にします (環境に関係なく)
* レガシーブラウザーが `SameSite` に `None` を設定することをサポートしていない場合に備えて、フォールバック Cookie を設定します。これらのフォールバック Cookie は `auth0_compat`、`auth0-mf_compat`、`did_compat` です

以下の図は、新規のやり取りの際に何が起こるかを示しています。エンドユーザーは、これまでアクセスしたことのないページをリクエストします。サーバーは、訪問者が再度アクセスしたときのレンダリング方法を変更し、seen Cookie を設定します。`set-cookie` header の灰色の部分は、実際の Cookie である `key=value` です。赤色の部分は Cookie 属性で、ブラウザーがこれを Cookie jar に保存し、後でリクエストに Cookie の `key=value` ペアを含めるかどうかを判断します。

<Frame>
  <img src="https://mintcdn.com/translations/mMSz-RNYLuOm2GmQ/docs/images/cdy7uua7fh8z/ItaoOzUnri9dkCkZ3V0dj/e64711c0f3ae5c361fe2321e3666b1cf/cookie-fresh-interaction.png?fit=max&auto=format&n=mMSz-RNYLuOm2GmQ&q=85&s=87df0d50ebb1ade400ccddab4a855059" alt="sameSite Cookie Attributes Fresh Interaction Flow" width="1730" height="758" data-path="docs/images/cdy7uua7fh8z/ItaoOzUnri9dkCkZ3V0dj/e64711c0f3ae5c361fe2321e3666b1cf/cookie-fresh-interaction.png" />
</Frame>

次の図は、同じブラウジングセッションで同じリクエストを行った場合に何が起こるかを示しています。リクエストは同じサーバーに送られ、Cookie 属性によって seen Cookie の送信が禁止されていないため、その Cookie はリクエストの cookie header に自動的に含まれます。サーバーはこの Cookie を受け取ったことに基づいて、異なるレスポンスを返します。

<Frame>
  <img src="https://mintcdn.com/translations/pvjQqAy3EB2TK6NP/docs/images/cdy7uua7fh8z/4dc2HWnmPBOV6cvdKbNM6g/50149f55e38fdf7453944932a3ef9d1c/cookie-return-interaction.png?fit=max&auto=format&n=pvjQqAy3EB2TK6NP&q=85&s=d86f908c514d4d2d290a5e75df0d934e" alt="sameSite Cookie Attributes Cookie Return Interaction flow" width="1528" height="904" data-path="docs/images/cdy7uua7fh8z/4dc2HWnmPBOV6cvdKbNM6g/50149f55e38fdf7453944932a3ef9d1c/cookie-return-interaction.png" />
</Frame>

<div id="features-affected">
  ## 影響を受ける機能
</div>

以下の表は、`SameSite` 属性の変更がアプリにどのような影響を及ぼすかを示しています。

| アプリの動作                                                                                        | 変更の影響を受けるか |
| --------------------------------------------------------------------------------------------- | ---------- |
| Web サイトが `https://` ではない場合に `sameSite=none` として設定される Cookie                                   | はい         |
| Cookie に明示的な `sameSite` 属性値が設定されておらず、クロスオリジンのコンテキスト (HTTP form\_post、iframe の埋め込みなど) で必要になる場合 | はい         |
| ネイティブアプリ (Cookie ベースでも Web ベースでもないものすべて)                                                      | いいえ (M2M)  |
| `sameSite` の Cookie 属性値を明示的にすでに設定している場合                                                       | いいえ        |
| 同じ eTLD+1 上の異なるサブドメイン (アプリがカスタムドメインの Auth0 テナントと同じ eTLD+1 上にある)                               | 場合による      |

セッションを使用する Web アプリケーション (たとえば、ユーザー設定やショッピングカートなどを保存するもの) を利用していて、ユーザーが Google、GitHub、Auth0 などの <Tooltip tip="アイデンティティプロバイダー（IdP）: デジタルアイデンティティを保存および管理するサービス。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=identity+providers">アイデンティティプロバイダー</Tooltip> を使ってサインインできるようにしている場合、その機能は Cookie に依存しています。ブラウザーの Cookie の挙動変更によって、ユーザーエクスペリエンスが損なわれる可能性があります。たとえば Google Chrome は、この変更を最初に展開したブラウザーベンダーであり、Web アプリケーションと互換性がなくなる可能性があります。

Google Chrome と Microsoft Edge では、`SameSite` を未定義にした場合の仕様が変更され、`SameSite` の既定値は `none` ではなく `lax` になっています。

たとえば、新しい UI を構築し、Auth0 ゲートウェイ経由でプロキシする複数のサービスがあるとします。このゲートウェイで Cookie セッションを作成している場合、クロスオリジンの request を行うと、Javascript コンソールに次の warning が表示されることがあります。

`A cookie associated with a cross-site resource (URL) was set without the SameSite attribute. A future release of Chrome will only deliver cookies with cross-site requests if they are set with SameSite=None and Secure. You can review cookies in developer tools under Application>Storage>Cookies and see more details at https://www.chromestatus.com/feature/5088147346030592 and https://www.chromestatus.com/feature/5633521622188032`

<div id="actions-you-need-to-take">
  ## 必要な対応
</div>

この変更に備えて、次の対応を行ってください。

* [非対応ブラウザー](https://www.chromium.org/updates/same-site/incompatible-clients)の一覧を確認してください。
* Auth0 とのやり取りで `response_mode=form_post` を使用している場合は、アプリケーションが `SameSite=none` を使用するよう設定してください (Chrome では `localhost` であっても例外はありません) 。
* `SameSite` 属性が `None` の場合は、`Cookie` を secure に設定してください。そうしないと、ブラウザーに拒否されます。コールバック URL に HTTP を使用している場合、認可リクエストの state/<Tooltip tip="Nonce: リプレイ攻撃を検出して防止するために認証プロトコルで一度だけ発行される任意の数値。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=nonce">nonce</Tooltip> の関連付けにそのような Cookie を使用すると、動作しなくなります。そのため、HTTPS を使用するか、`SameSite=lax` を設定する必要があります
