Actionsを使用したセッション
Actionsでセッションを使用すると、認証後のリスク検出と応答機能を構成して、アプリケーションとユーザーをセッションハイジャックから保護することができます。また、2セッションライフタイム制限を動的にカスタマイズすることもできます。
これを容易にするために、ログイン後アクションには以下の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
オブジェクトは両方共に、authorization codeフロー、暗黙的フロー、デバイスコードフローを含む、インタラクティブなウェブベースのフローと、SAMLおよびWS-Fedをサポートします。
event.session
オブジェクトを使用すると、最新のインタラクションのタイムスタンプを確認し、現在のトランザクションに関連するリスクを評価することができます。event.session
オブジェクトをevent.authentication
やevent.request
など、他のイベントオブジェクトと組み合わせることもできます。
api.session
オブジェクトを使用して、既存のセッションの有効期限日をリセットするか、セッションを取り消すことができます。
これらのオブジェクトの詳細については、以下をご確認ください。
イベントオブジェクト:セッションのイベントオブジェクトとプロパティについて説明します。
APIオブジェクト:セッションのAPIオブジェクトとメソッドについて説明します。
Actionsでセッションを取り消す
ログイン後のapi.session.revoke(reason, options)メソッドを使用すると、トランザクションに関連するリスクに対処することができます。このメソッドには、取り消されたトランザクションにバインドされているリフレッシュトークンを保存できるオプションが含まれています。
セッションを無効にするだけでなく、このメソッドはsession-revoked
のOIDCバックチャネルログアウトイニシエーターも開始し、現在のセッションにバインドされているすべてのアプリケーションからユーザーをログアウトさせ、テナントログにsession_revokedイベントを記録します。
このメソッドでは以下を行うことができます。
Auth0で現在のセッションのトランザクションを無効にする
現在のトランザクションを拒否する
一致する
session_id
値を持つ既存のセッションと関連するリフレッシュトークンすべてを取り消すこれはカスタマイズ可能なオプションであり、取り消すのではなく、リフレッシュトークンの保持を選択することもできます。この操作は非同期的に実行され、最終的には整合します。
イベントログの取り消しを監視する
取り消し操作を行うと、テナントログに以下のログイベントが追加されます。
関連するsession_id
属性と取り消されたセッションを示すsession_revoked
イベントコード。
Actionsでセッションの有効期限日を変更する
セッションの有効期限日を変更するには、以下のポストログインメソッドを使用します。
api.session.setExpiresAt(absolute)を使用すると、特定のセッションに新しい絶対的な(後からログインが必要な)セッション有効期限を定義できます。
api.session.setIdleExpiresAt(idle)を使用すると、特定のセッションに新しい非アクティブタイムアウトの日付を設定できます。
これらのメソッドを使用すると、以下を基に、セッションのライフタイムと非アクティブポリシーを動的にカスタマイズすることができます。
ユーザーの組織
ユーザーのAuth0接続
特定ユーザーのグループメンバーシップまたはプロファイル
リスク評価
Actionsの実行中に使用できる他の動的基準
制限事項
ログイン後APIメソッドのapi.session.setExpiresAt(absolute)
とapi.session.setIdleExpiresAt(idle)
がリリースされる前に発行されたセッションには、次のevent.sessionプロパティは含まれません:last_interacted_at
。
ログイン後APIメソッドのapi.session.revoke(reason, options)
がリリースされる前に発行されたセッションには、以下のevent.session.deviceプロパティは含まれません。
initial_ip
initial_asn
initial_user_agent
セキュリティ上の理由から、非アクティブタイムアウトと絶対タイムアウトを、テナントのセッションライフタイム制限で定義されたセッション設定を超えた値には設定できません。ライフタイム制限を超えた日付を設定しようとすると、APIメソッドはライフタイム制限に達するまで更新し、テナントログに警告イベント(w
)を記録します。
ユースケース:セッションを取り消す
Actionsを使用すると、リスク検出を構成して、危険なセッションと関連するリフレッシュトークンをポストログインのapi.session.revoke(reason, options)
メソッドとevent.session
オブジェクトを使って取り消すことができます。
ASNネットワークバインディングによるセッションの取り消し
ログイン後オブジェクトプロパティのevent.session.device.initial_asn
およびevent.request.asn
を使用して、その期間中セッショントランザクションと特定のautonomous system number (ASN)ネットワークをバインドして、ASNネットワークが変更した場合は再認証を要求できます。
exports.onExecutePostLogin = async (event, api) => {
const sessionInitialAsn = event.session?.device?.initial_asn;
const sessionCurrentAsn = event.request.asn;
// if there is a session and the ASN changes
if (
sessionInitialAsn &&
sessionCurrentAsn &&
sessionInitialAsn != sessionCurrentAsn
) {
api.session.revoke( "Invalid network change. Login again from a trusted network" )
}
};
Was this helpful?
この例では、Actionの開始時点に、event.session.device.initial_asn
およびevent.request.asn
プロパティが、トランザクション中、同じASNネットワークを維持しているか検証するために確認が行われます。この確認に失敗すると、Actionはapi.session.revoke()
を呼び出して以下を実行します。
セッションを無効にする
現在のトランザクションを拒否する
関連するリフレッシュトークンすべてを取り消す
再認証を促す
IPバインディングによるセッションの取り消し
ログイン後オブジェクトプロパティのevent.session.device.initial_ip
とevent.request.ip
を使って、その期間、セッションのトランザクションに同じIPアドレスが維持されるようにします。このシナリオでは、IPの変更はすべて危険だとみなされ、ユーザーは再認証を促されます。
exports.onExecutePostLogin = async (event, api) => {
const sessionInitialIp = event.session?.device?.initial_ip;
const sessionCurrentIp = event.request.ip;
// if there is a session and the IP changes
if (
sessionInitialIp &&
sessionCurrentIp &&
sessionInitialIp != sessionCurrentIp
) {
api.session.revoke("Invalid IP change")
}
};
Was this helpful?
この例では、Actionの開始時点に、event.session.device.initial_ip
およびevent.request.ip
プロパティが、トランザクション中、同じIPアドレスを維持しているか検証するために確認が行われます。この確認に失敗すると、Actionはapi.session.revoke()
を呼び出して以下を実行します。
セッションを無効にする
現在のトランザクションを拒否する
関連するリフレッシュトークンすべてを取り消す
再認証を促す
ユースケース:セッションの有効期限日をカスタマイズする
Actionsを使用して、セッションのアイドルと絶対的な有効期限日をカスタマイズできます。特に、ログイン後のapi.session.setExpiresAt(absolute)
とapi.session.setIdleExpiresAt(idle)
メソッド、およびevent.session
オブジェクトを使用して、ある特定のセッショントランザクションの有効期限日を構成できます。
接続に基づいて絶対的なセッション有効期限時間をカスタマイズする
以下のログイン後オブジェクトプロパティを使用すると、ユーザーの認証に使用される接続に対してライフタイムを定義できます。
event.session.created_at
event.session.expires_at
また、Auth0 Management APIを使用して接続メタデータのevent.connection.metadata.session_timeout
を作成し、特定の接続タイムアウトを定義します。
exports.onExecutePostLogin = async (event, api) => {
const created = Date.parse(event.session?.created_at ?? "");
// desired session lifetime for this connection in milliseconds, configured as connection metadata
const connection_lifetime = event.connection?.metadata?.session_timeout;
// if there is a session lifetime defined for the connection, set it
if (event.session?.id && connection_lifetime) {
api.session.setExpiresAt(created + Number(connection_lifetime));
}
};
Was this helpful?
この例では、Actionの開始時点でチェックが行われ、現在の接続でsession_timeout
が定義されているかどうか検証されます。定義されている場合、Actionはセッションのcreated
日+connection_lifetime
と等しくなるようにセッションの有効期限を設定します。
Organizationに基づいてセッションの非アクティブタイムアウトをカスタマイズする
current_time
変数を定義し、idle_session_timeout
という新しいOrganizationメタデータを使用して、組織に希望するアイドルタイムアウトを設定できます。
exports.onExecutePostLogin = async (event, api) => {
// The Organization metadata is configured with a shorter idle timeout for sessions (in milliseconds)
const idle_organization_lifetime =
event.organization?.metadata?.idle_session_timeout;
// If the organization has an specific idle timeout defined, set the timeout
if (event.session?.id && idle_organization_lifetime) {
const current_time = new Date().getTime();
api.session.setIdleExpiresAt(
current_time + Number(idle_organization_lifetime),
);
}
};
Was this helpful?
この例では、Organizationに対して特定のアイドルタイムアウトが定義されている場合、アクションはcurrent_time
+idle_organization_lifetime
と等しくなるようにセッションの非アクティブタイムアウトを設定します。