アクションを使用したリフレッシュトークン
リフレッシュトークンにアクションを使用すると、認証後のリスク検出と応答機能を構成して、アプリケーションとユーザーを侵害されたリフレッシュトークンから保護することができます。リフレッシュトークンの有効期限を動的にカスタマイズすることもできます。
event.refresh_token:
creation
、expiry dates
、associated clients
、resource servers
、device
のコンテキストなどの関連情報と、ブラウザーベースのフローにsession_id
を提供します。api.refreshToken:セッションを取り消すか、有効期限日を変更することで、既存のリフレッシュトークンを管理することができます。
これを容易にするために、ログイン後のアクションには以下の2つの重要なオブジェクトがあります。
event.refresh_tokenとapi.refreshTokenオブジェクトは両方とも、リフレッシュトークンの交換トランザクションに対応しています。
event.refresh_token
オブジェクトを使用すると、last_exchange_at
プロパティを確認し、現在のトランザクションに関してリスクを評価することができます。event.refresh_token
オブジェクトをevent.authentication
など、他のイベントオブジェクトと組み合わせることもできます。
イベントオブジェクト:フレッシュトークンのイベントオブジェクトとプロパティについて説明します。
APIオブジェクト:フレッシュトークンのAPIオブジェクトとメソッドについて説明します。
アクションでリフレッシュトークンを取り消す
api.refreshToken
オブジェクトを使用して、既存のリフレッシュトークンの有効期限日をリセットするか、リフレッシュトークンを取り消すことができます。
これらのオブジェクトの詳細については、以下をご確認ください。
イベントログの取り消しを監視する
ポストログインのapi.refreshToken.revoke(reason)メソッドを使用すると、トランザクションに関したリスクに対処することができます。このメソッドでは以下を行うことができます。
取り消し操作を行うと、テナントログに以下のログイベントが追加されます。
アクションでリフレッシュトークンの有効期限日を変更する
リフレッシュトークンの取り消しを示すsrrt
イベントコード
Auth0で現在のリフレッシュトークンのトランザクションを無効にする
403 HTTPステータスコードを返して、現在のトランザクションを拒否する
リフレッシュトークンが以前に認証されたセッションにバインドされている場合、ログには、session_id
属性に認証済みセッションへの参照が含まれます。
api.refreshToken.setExpiresAt(Date)は、特定のリフレッシュトークンに新しい絶対ライフタイムを定義できるようにします。
api.refreshToken.setIdleExpiresAt(Date)は、特定のリフレッシュトークンに新しい非アクティブタイムアウトを設定できるようにします。
特定ユーザーのグループメンバーシップまたはプロファイル
リスク評価
アクションの実行中に使用できる他の動的条件
リフレッシュトークンの有効期限日を変更するには、以下のポストログインメソッドを使用します。
制限事項
これらのメソッドを使用すると、以下を基に、リフレッシュトークンのライフタイムと非アクティブポリシーを動的にカスタマイズすることができます。
2023年9月21日以降に発行されたリフレッシュトークン(US-3リ-ジョンのテナントの場合は2024年2月22日)には、適切な値を持つセッションID(session_id
)プロパティが含まれます。この日付よりも前に発行されたリフレッシュトークンには、null
値を持つこのプロパティが含まれます。
ポストログインAPIメソッドのapi.refreshToken.revoke(reason)
がリリースされる前に発行されたリフレッシュトークンには、event.refresh_token.device
情報は含まれません。
ユースケース:リフレッシュトークンを取り消す
無期限のリフレッシュトークンや未交換のリフレッシュトークンには、event.refresh_token.last_exchanged_at
プロパティは含まれません。
ImpossibleTravelによるトークンの取り消し
セキュリティ上の理由から、非アクティブタイムアウトと絶対タイムアウトを、リフレッシュトークンの有効期限日で定義されたアプリケーションのフレッシュトークンの設定を超えた値には設定できません。有効期限日を超えた日付を設定しようとすると、APIメソッドはリフレッシュトークンの有効期限まで更新し、テナントログに警告イベント(w
)を記録します。
アクションを使用すると、リスク検出を構成して、リフレッシュトークンをapi.refreshToken.revoke(reason)
メソッドとイベントオブジェクトを使って取り消すことができます。
Adaptive MFAのアセスメントオブジェクトを使用すると、ユーザーがImpossibleTravelを示す場所からログインしているか判定し、そのトランザクションに関連付けられた現在のリフレッシュトークンを取り消すことができます。
ユーザーの組織
ユーザーのAuth0接続
特定ユーザーのグループメンバーシップまたはプロファイル
リスク評価
IPバインディングによるリフレッシュトークンの取り消し
exports.onExecutePostLogin = async (event, api) => {
const { riskAssessment } = event.authentication ?? {};
const ImpossibleTravel = riskAssessment?.assessments.ImpossibleTravel;
// If this is an impossible travel and this is a refresh token exchange
if (ImpossibleTravel?.code === "impossible_travel_from_last_login") {
if (event.refresh_token) {
api.refreshToken.revoke("Refresh token revoked due to impossible travel");
}
}
};
Was this helpful?
この例では、アクションの開始時点でevent.authentication.ImpossibleTravel.code
がimpossible_travel_from_last_login
プロパティに等しいか検証されます。true
の場合、アクションはapi.refreshToken.revoke()
を呼び出し、以下を行います。
ポストログインオブジェクトプロパティのevent.refresh_token.device.initial_ip
とevent.request.ip
を使って、その期間、リフレッシュトークンのトランザクションに同じIPアドレスが維持されるようにします。このシナリオでは、IPの変更はすべて危険だとみなされ、新しいリフレッシュトークンが要求されます。
ユーザーの組織
ユーザーのAuth0接続
「403 access_denied」のエラー応答を返す
「Refresh token revoked due to impossible travel(impossible travelによりトークンが取り消されました)」というエラーを発行する
exports.onExecutePostLogin = async (event, api) => {
const refreshTokenInitialIp = event.refresh_token?.device?.initial_ip;
const requestCurrentIp = event.request.ip;
// if there is a refresh token and the IP changes
if (
refreshTokenInitialIp &&
requestCurrentIp &&
refreshTokenInitialIp != requestCurrentIp
) {
api.refreshToken.revoke("Invalid IP change");
}
};
Was this helpful?
ユースケース:リフレッシュトークンの有効期限日をカスタマイズする
この例では、アクションの開始時点で、event.refresh_token.device.initial_ip
とevent.request.ip
のプロパティを使ってIPアドレスの追跡が確認されます。アクションは、トランザクションのIPアドレスが変更されたかを判定します。true
の場合、アクションはapi.refreshToken.revoke()
を呼び出し、以下を行います。
組織を基にリフレッシュトークンの絶対有効期限日をカスタマイズする
または、制限の少ないアクションでは、event.request.asn
プロパティとevent.refresh_token.device.initial_asn
プロパティを追跡し、IPの変更でなく、ASNの変更を監視することができます。
アクションを使用すると、リフレッシュトークンのライフタイムと非アクティブの日付をカスタマイズすることができます。具体的には、特定のトランザクションについて、リフレッシュトークンのアイドルTTLと絶対有効期限日を設定することができます。これには、ポストログインのapi.refreshToken.setExpiresAt(Date)
メソッドとapi.refreshToken.setIdleExpiresAt(Date)
メソッドを使用します。
以下のポストログインオブジェクトプロパティを使用すると、現在のトランザクションに関連付けられた組織について、リフレッシュトークンのライフタイムを定義することができます。
トランザクションを拒否する
リフレッシュトークンを取り消す
メンバーシップロールを基にリフレッシュトークンの非アクティブタイムアウトをカスタマイズする
exports.onExecutePostLogin = async (event, api) => {
// Refresh token timeout (in miliseconds) metadata configured in the Organizations
const organization_refresh_token_lifetime =
event.organization?.metadata?.refresh_token_timeout;
if (organization_refresh_token_lifetime) {
// Refresh token already exists
if (event.refresh_token) {
const created = Date.parse(event.refresh_token.created_at);
const new_expiration_time =
created + Number(organization_refresh_token_lifetime);
api.refreshToken.setExpiresAt(new_expiration_time);
} else {
// Refresh token doesn't exist yet (e.g., token is being issued)
const current_time = new Date().getTime();
const new_expiration_time =
current_time + Number(organization_refresh_token_lifetime);
api.refreshToken.setExpiresAt(new_expiration_time);
}
}
};
Was this helpful?
この例では、アクションの開始時点で、リフレッシュトークンのライフタイムがorganization_refresh_token_lifetime
よりも長いかが検証されます。リフレッシュトークンのライフタイムの方がが長い場合、アクションはリフレッシュトークンの有効期限が「リフレッシュトークンの作成
日+organization_refresh_token_lifetime
」と等しくなるように設定します。
ポストログインオブジェクトプロパティのevent.refresh_token.last_exchanged_at
と event.refresh_token.idle_expires_at
を使用すると、ユーザーのメンバーシップロールを基に、リフレッシュトークンの非アクティブタイムアウトを定義することができます。