- ページの読み込みやセッションをまたいでゲストユーザーを追跡する
- ショッピングカートの参照情報、設定、同意、プロファイリング情報などのメタデータを保存する
- 認証なしでAPI呼び出し用のアクセストークンを発行する
- ユーザーがサインアップまたはログインした際に、匿名でのアクティビティを認証済みアカウントに移行する
匿名セッションのデータを収集する
まだ認証されていないユーザーも含め、ユーザーに関する情報の収集を開始すると、アプリケーションは/anonymous/token エンドポイントに POST リクエストを送信します。
Auth0 は2つのトークンを返します。
- 匿名セッションを識別し、維持するための セッショントークン。
- ユーザーが リソースサーバー (API) に提示できる アクセストークン。
user_id のセッションが継続されるため、すべてのアクティビティを単一の起点にたどることができます。
アクセストークンを使用すると、匿名ユーザーは既存の任意の API を呼び出せます。
Anonymous session data of user anon@1234-5678-90
匿名セッションのデータをユーザーの メタデータ に引き継ぐ
匿名セッションを認証済みユーザーへ引き継ぐ仕組みは、利用するフローや、アプリケーションがどのドメイン・FQDN に配置されているかによって異なります。リダイレクト型のフロー (認可コード、PKCE を用いた認可コード) では、Cookie または転送チケットのいずれかを使用します。クッキーを通じてセッションを移行する
匿名セッション中のユーザーがログインまたはサインアップする際、アプリケーションはクッキーを使用して、anonymous_session_tokenを/authorizeエンドポイントに渡します。この仕組みは、アプリケーションと認可サーバーが同じドメインにある場合に機能します。たとえば、アプリケーションがapplication.mydomain.comにあり、認可サーバーのカスタムドメインがauth.mydomain.comである場合です。この場合、クッキーは同一ドメインと見なされ、自動的に認可サーバーへ転送されるため、ログインは通常どおり機能します。
cookie example
転送チケットを使用してセッションを移行する
クッキーをクロスドメインで送信する必要があるシナリオでは、ブラウザーの複数の仕組みによって、匿名セッションクッキーのネットワーク送信がブロックされます。サーバーとクライアントでCORS設定が正しく構成されていても、AppleのIntelligent Tracking Protection (ITP) などの高度な仕組みによってクッキーがブロックまたは破棄され、ユーザーが一致しなくなる場合があります。 これを回避するには、クッキーに依存しない2段階の匿名セッション転送の仕組みを使用します。urn:auth0:anon_transferオーディエンスを要求して/anonymous/tokenエンドポイントを呼び出し、引き換えにanon_transfer_tokenを受け取ります。/authorizeの呼び出しにパラメーターとしてanon_transfer_tokenを含めます。
anon_transfer_tokenは、それを要求したIPアドレスに紐付けられます。このクッキーを使用しない仕組みをログインに使用する予定がある場合は、意図しない衝突や注入を避けるため、テナント設定で匿名セッションクッキーの発行を無効にすることをAuth0では推奨しています。
ログインに成功すると、Auth0 では、pre-user-registration および post-login の Actions トリガーで、event.anonymous_session オブジェクトを通じて匿名セッションデータを利用できます。
anonymous session object
リソースオーナーパスワードグラント (ROPG) のシナリオでセッションを移行する
ログインに ROPG を使用する場合は、/oauth/token 呼び出しのリクエストボディに anonymous_session_token を含めます。
Anonymous session token in a ROPG request
転送後に匿名セッションを終了する
ユーザーが認証されても匿名セッションのクッキーは自動的に破棄されないため、その後のログインでもクッキーが送信され続ける可能性があります。セッションを終了するには、/anonymous/logout エンドポイントを使用します。
ベストプラクティス
匿名セッションに関するベストプラクティスは以下のとおりです。- ユーザーの匿名セッションデータが失われないよう、適切な匿名セッションの有効期間を設定します。Auth0では、30日以上の有効期間を推奨しています。
-
匿名の
anon@ユーザーがAPIで実行できる操作を制限します。 - トークンを検証し、メタデータをサニタイズします。サーバー側でバリデーションを行わずに、クライアントからのメタデータやトークンを決して信頼しないでください。
- アクセストークンは有効期限まで再利用できるため、キャッシュします。
制限事項
- 匿名セッションでは、パスワードリセットフローはサポートされていません。
- 認証リクエストと実際のログインが別のデバイスで行われるため、デバイスコードはサポートされていません。
- 認証リクエストと確認が別のデバイスで行われるため、クライアント主導のバックチャネル認証 (CIBA)はサポートされていません。
- トランザクションの性質上 (たとえば、代理ログイン) 、匿名データが誤ったユーザーに関連付けられるおそれがあるため、カスタムトークン交換はサポートされていません。
- リフレッシュトークンを持つユーザーはすでにログイン済みであるため、匿名セッションではリフレッシュトークン交換はサポートされていません。