Actions でセッションを使用すると、認証後のリスク検知と対応機能を設定し、セッションハイジャックからアプリケーションとユーザーを保護できます。また、セッション有効期間の制限 を動的にカスタマイズすることもできます。
これを実現するために、post-login Actions には 2 つの主要なオブジェクトがあります。
- event.session: 一意の
id、created_at、expires_at、idle_expires_at、updated_at といった日時情報に加え、clients、authentication_at、および ASN、IP、User_agent などの device 情報を含む関連情報を提供します。
- api.session: セッションの取り消しや
expiry 日付の変更によって、既存のセッションを管理できます。
event.session オブジェクトと api.session オブジェクトはどちらも、認可コードフロー、Implicit Flow、デバイスコードフロー、さらに および を含む、対話型の Web ベースのフローをサポートしています。
event.session オブジェクトを使用すると、直近のやり取りのタイムスタンプを確認し、現在のトランザクションに関連するリスクを評価できます。また、event.session オブジェクトは event.authentication や event.request など、ほかのイベントオブジェクトと組み合わせて使用することもできます。
そのうえで、api.session オブジェクトを使用して、既存のセッションの有効期限をリセットすることも、セッションを取り消すこともできます。
これらのオブジェクトの詳細については、以下を参照してください。
post-login の api.session.revoke(reason, options) メソッドを使用すると、トランザクションに関連するリスクに対応できます。このメソッドには、取り消されたトランザクションに紐づく を保持できるオプションも含まれています。
このメソッドは、セッションを取り消すだけでなく、現在のセッションに紐づくすべてのアプリケーションからユーザーをログアウトさせる session-revoked OIDC バックチャネルログアウトのイニシエーター を開始し、テナントログに session_revoked イベントを記録します。
このメソッドは次の用途に使用できます。
-
Auth0 で現在のセッションのトランザクションを無効化する
-
現在のトランザクションを拒否する
-
既存のセッションに関連付けられ、
session_id の値が一致するすべてのリフレッシュトークンを取り消す。
- これはカスタマイズ可能なオプションで、リフレッシュトークンを取り消さずに保持することもできます。この操作は非同期で実行され、最終的に整合性が保たれます。
api.session.revoke(reason,options) メソッドを使用する場合は、event.session.id プロパティが存在することを確認してください。api.access.deny() とは異なり、api.session.revoke() は現在のトランザクションを拒否するだけでなく、セッションも取り消します。そのため、再度第1認証要素での認証が必要になります
取り消し操作を行うと、テナントログに次のログイベントが追加されます。
取り消されたセッションと、それに関連付けられたsession_id属性を示すsession_revokedイベントコード。
次の post-login メソッドを使用すると、セッションの有効期限を変更できます。
- api.session.setExpiresAt(absolute) では、指定したセッションの新しい絶対的なセッション有効期限 (ログインを要求する経過時間) を定義できます。
- api.session.setIdleExpiresAt(idle) では、指定したセッションの新しい無操作タイムアウト日時を設定できます。
これらのメソッドを使うと、次の内容に基づいてセッションの有効期間や無操作ポリシーを動的にカスタマイズできます。
- ユーザーの organization
- ユーザーの Auth0 接続
- 特定ユーザーのグループメンバーシップまたはプロファイル
- リスク評価
- Action の実行中に利用できるその他の動的な条件
api.session.setExpiresAt(absolute) メソッドと api.session.setIdleExpiresAt(idle) メソッドを使用する場合は、event.session.id のような event.session オブジェクトのプロパティが存在することを確認してください。api.session.setIdleExpiresAt(idle) メソッドは、現在のインタラクションに対するセッションの無操作タイムアウトを設定します。このメソッドを再度適用しない場合、以降の正常なインタラクションでは、セッションの無操作タイムアウト設定によって無操作タイムアウトが上書きされます。
ActionsでセッションCookieの永続性を設定する
post-login api.session.setCookieMode(options) メソッドを使うと、セッションCookieの永続性を変更できます。セッションCookieを永続化するか、非永続にするかを設定できます。
非永続 (エフェメラル) セッションは、メモリ内にのみ存在するため、セキュリティ向上に役立ちます。これらのセッションはブラウザーまたはアプリケーションを閉じると消去されるため、信頼できないデバイスからのアクセスやステップアップ認証のシナリオなど、機密性の高いワークフローに適しています。
このメソッドは、次の目的で使用できます。
-
リスクの高いロールまたはグループに属するユーザーに対して、エフェメラルセッションを強制する
-
特定のデバイスまたは IP 範囲について、ブラウザーを閉じた際に再認証を必須にする
-
信頼できない環境や共有環境 (例: 公共のコンピューター) でセッションの有効期間を短くする
このメソッドは、次のパラメータを受け取ります。
api.session.setCookieMode() メソッドは、現在のセッションに対してデフォルトのテナント設定を上書きします。Auth0 はセッション全体を通してこの永続性設定を保持するため、以後のサイレント認証フローで再度設定する必要はありません。api.session.setCookieMode() メソッドは、post-login Action 内で使用する必要があります。api.session を利用できないコンテキストで使用した場合、呼び出しはサイレントに失敗します。
セッションCookieの永続性を実装する方法については、Sessions を使用してサインインしたままにするを設定する を参照してください。
post-login API メソッド api.session.setExpiresAt(absolute) および api.session.setIdleExpiresAt(idle) のリリース以前に発行されたセッションには、次の event.session プロパティ last_interacted_at. は含まれません。
post-login API メソッド api.session.revoke(reason, options) のリリース以前に発行されたセッションには、次の event.session.device プロパティは含まれません。
initial_ip
initial_asn
initial_user_agent
セキュリティ上の理由から、非アクティブタイムアウトおよび絶対タイムアウトには、テナントのセッション有効期間の制限で定義されたセッション設定を超える値は設定できません。有効期間の制限を超える日時を設定しようとすると、API メソッドはその上限まで更新し、警告イベント (w) をテナントログに記録します。
Actions を使用すると、リスク検知を設定し、post-login の api.session.revoke(reason, options) メソッドと event.session オブジェクトを使って、リスクのあるセッションとそれに関連するリフレッシュトークンを取り消すことができます。
ASNネットワークへのバインディングによりセッションを取り消す
post-login オブジェクトのプロパティ event.session.device.initial_asn と event.request.asn を使用すると、セッショントランザクションをセッションの有効期間中、特定の 自律システム番号 (ASN) ネットワークにバインドし、ASNネットワークが変わった場合に再認証を必須にできます。
この例では、Action の開始時に、event.session.device.initial_asn プロパティと event.request.asn プロパティが、トランザクション全体を通じて同じ ASN ネットワーク内にあるかどうかを確認します。このチェックに失敗した場合、Action は api.session.revoke() を呼び出して、次の処理を行います。
- セッションを無効にする
- 現在のトランザクションを拒否する
- 関連付けられているすべてのリフレッシュトークンを取り消す
- 再認証を求める
post-login オブジェクトのプロパティ event.session.device.initial_ip と event.request.ip を使用すると、セッショントランザクションが継続中ずっと同じ IP アドレスに維持されるようにできます。このシナリオでは、IP アドレスの変更はすべてリスクと見なされ、ユーザーは再認証を求められます。
この例では、Action の開始時に、event.session.device.initial_ip プロパティと event.request.ip プロパティが、トランザクションの間を通じて同じ IP アドレスのままであることを確認します。チェックに失敗した場合、Action は続いて api.session.revoke() を呼び出し、次のことを行います。
- セッションを無効化する
- 現在のトランザクションを拒否する
- 関連付けられているすべてのリフレッシュトークンを取り消す
- 再認証を求める
ユースケース: セッションの有効期限をカスタマイズする
Actions を使用すると、セッションのアイドル有効期限と絶対有効期限をカスタマイズできます。具体的には、post-login の api.session.setExpiresAt(absolute) および api.session.setIdleExpiresAt(idle) メソッドと event.session オブジェクトを使用して、特定のセッション トランザクションの有効期限を設定できます。
接続に基づいてセッションの絶対有効期限をカスタマイズする
ユーザーの認証に使用する接続の有効期間を定義するには、次の post-login オブジェクトプロパティを使用できます。
- event.session.created_at
- event.session.expires_at
また、Auth0 の Management API を使用して接続のメタデータを作成し、event.connection.metadata.session_timeout で特定の接続のタイムアウトを定義することもできます。
この例では、Action の開始時に、現在の接続で session_timeout が定義されているかどうかを確認します。その場合、Action はセッションの有効期限を、セッションの created 時刻に connection_lifetime を加えた時刻と同じになるように設定します。
組織ごとにセッションのアイドルタイムアウトをカスタマイズする
current_time 変数を定義し、idle_session_timeout という新しい組織メタデータを使って、組織ごとに必要なアイドルタイムアウトを設定できます。
この例では、組織に対して特定のアイドルタイムアウトが定義されている場合、Action は無操作タイムアウトを current_time に idle_organization_lifetime を加えた値に設定します。