Auth0 SDKでマルチサイトセッションを管理する

短命セッション

このワークフローでは、マルチサイトセッション管理をサポートするためauth0-spa-js SDKをどのように実装するべきかを示します。このシナリオでは、テナントSSO非アクティブタイムアウトは300秒に設定され、各SPAアプリケーションのIDトークン有効期限は150秒に設定されているものとします。これは「短命」セッションとみなされます。

SDKの特徴

PKCEフロー

IDトークンまたはアクセストークンを取得するすべての方法について、SDKはProof Key for Code Exchangeワークフローの複雑さをすべて管理します。この機能を利用するための追加の操作や設定はありません。

ディープリンク

ユーザーエクスペリエンスを改善するため、SDKにはloginWithRedirect()メソッドにappStateパラメーターが含まれています。現在のアプリについての詳細は、認証の成功時に返されるAuthサーバーへの要求の部分としてパッケージ化されます。これは、ユーザージャーニーをシームレスに継続できるようにします。

クイックスタートでは、PrivateRouteコンポーネントがtargetUrlの状態パラメーターを設定し、index.jsonRedirectCallback関数がこの値を解凍して、認証完了時にユーザーをリダイレクトします。

トークンの保管

返されたトークンを可能な限り安全な方法で保管するため、すべてのトークンはローカルキャッシュに含められます。IDとアクセストークンは、必要に応じてトークンを取得するために使用されるオーディエンス値とスコープ値のペアとして保管されます。

また、IDトークンまたはアクセストークンのいずれかの有効期限が切れると、キャッシュトークンは削除されるため、キャッシュ内にあるトークンはまだ有効であると判断できます。

APIを呼び出す

getTokenSilently()メソッドは、まずトークンキャッシュを活用するために使用され、トークンキャッシュがない場合には非表示のiframeを起動して、新しいトークンを取得します。この目的のため、APIへのすべての要求は、このメソッドを使用してベアラートークンヘッダーを構築できます。期限切れのトークンを処理するための追加ロジックを不要です。

クイックスタートでは、ExternalServiceビューがこの機能を使用してExpress APIに要求を行います。

ユーザーにセッションを継続するよう警告する

ユーザーがAuth0セッションを更新するアクションを行っていない場合、Auth0は、明示的にセッションの継続を選択するようユーザーに警告することを推奨します。

このアプローチの意図は、ユーザーが存在しなくなった場合にセッションが非アクティブになれるようにしつつ、それ以外の場合、資格情報をもう一度求めることなくセッションを継続できるようにサイレントトークンリフレッシュをトリガーする手段を提供することです。

非アクティブタイマーとタイムアウトのモーダルについては、「アプリケーション特有のログアウトURL」をお読みください。

ワークフローの例

  1. 最初の認証

  2. Auth0セッションの維持

  3. シームレスSSO

  4. ユーザーにセッション延長を促す

  5. ユーザーが明示的にアプリケーションからログアウト

  6. ユーザーがログアウト後、当初のアプリに戻る

最初の認証

  1. 新しいタブが開く

  2. ログイン要求

  3. ユーザーが資格情報を入力する

  4. SSOクッキー(有効期限あり)が設定されている

  5. トークンの交換が実行される

Diagram of Initial Authentication flow

Auth0セッションを維持する

  1. ユーザーが保護されたリソースからデータを要求する

  2. getTokenSilently()が呼び出される

  3. リソースが取得される

  4. ユーザーが保護されたリソースからデータを更新する

  5. getTokenSilently()が呼び出される

    1. iframeが起動される

    2. トークンの交換が実行される

  6. リソースが更新される

Diagram of maintaining a session

シームレスSSO

  1. ユーザーがプライベートルートに移動する

  2. isAuthenticated()で確認する

  3. falseの場合にはloginWithRedirect()を呼び出す

Diagram of seamless SSO flow for sessions

ユーザーにセッション延長を促す

  1. 240秒後に、60秒間継続するモーダルでセッションをアクティブに維持するようユーザーに促す

  2. セッションの維持を選択した場合には<>getTokenSilently()</>を呼び出す

Diagram of prompting a user to maintain a session

ユーザーが明示的にアプリケーションからログアウト

  1. ユーザーがログアウトを選択する

  2. logout()が呼び出される

    1. トークンキャッシュが消去される

    2. /oidc/logoutを呼び出す

    3. SSOクッキーを消去して、セッションデータを削除する

    4. ユーザーをログアウトページにリダイレクトする

Diagram of a user logging out

ユーザーがログアウト後、当初のアプリケーションに戻る

  1. ユーザーが保護されたリソースからデータを要求する

  2. getTokenSilently()が呼び出される

  3. アプリケーション依存の動作

Diagram of user returning to application after logging out

長寿命セッション

Auth0は、エンタープライズプラン向けの長寿命セッションをサポートしています。長寿命セッションセッションを使用すると、最長100日間の非アクティブ(アイドルタイムアウト)および最長1年間の合計期間(絶対タイムアウト)によるセッション制限を構成できます。四半期ごと、月ごと、またはその他のタイムラインがある場合、これによってエンドユーザーの負担を減らし、リスクの低いコンテンツと機能へのアクセスを提供できます。また、メディア企業は、コンテンツへのシームレスなアクセスを通じてユーザーエクスペリエンスを改善するため、長寿命セッションを活用できます。また、ユーザーエクスペリエンスとセキュリティに関する要件に基づき、長寿命セッションとパスワード認証のいずれかを選択することもできます。

ワークフローの詳しい内容は、シングルサインオン(SSO)セッションよりもアプリケーションセッションの方が短くなる長寿命セッションの場合には変わってきます。

詳細については、「セッションライフタイムの制限を構成する」と「アクセストークンのライフタイムを更新する」をお読みください。

もっと詳しく