サインアウト
Logto でのサインアウトは、2 つのレイヤーに分かれています:
- Logto セッションのサインアウト:Logto ドメイン下での集中サインインセッションを終了します。
- アプリのサインアウト:クライアントアプリケーション内のローカルセッション状態とトークンをクリアします。
Logto でのセッションの動作をよりよく理解するには、セッション を参照してください。
サインアウトメカニズム
1) クライアントサイドのみのサインアウト
クライアントアプリは、自身のローカルセッションとトークン(ID トークン / アクセス トークン / リフレッシュ トークン)をクリアします。これにより、ユーザーはそのアプリのローカル状態からのみサインアウトされます。
- Logto セッションはまだアクティブかもしれません。
- 同じ Logto セッション下の他のアプリはまだ SSO 可能です。
2) Logto でのセッション終了(現在の Logto 実装でのグローバルサインアウト)
集中 Logto セッションをクリアするには、アプリがユーザーをセッション終了エンドポイントにリダイレクトします。例えば:
https://{your-logto-domain}/oidc/session/end
現在の Logto SDK の動作では:
signOut()は/session/endにリダイレクトします。- 次に
/session/end/confirmに進みます。 - デフォルトの確認フォームは
logout=trueを自動投稿します。
その結果、現在の SDK のサインアウトは グローバルサインアウト として扱われます。
- グローバルサインアウト:集中 Logto セッションを取り消します。
グローバルサインアウト中に何が起こるか
グローバルサインアウト中:
- 集中 Logto セッションが取り消されます。
- 関連するアプリの許可は、アプリの認可状態に応じて処理されます:
offline_accessが付与されていない場合、関連する許可は取り消されます。offline_accessが付与されている場合、セッション終了によって許可は取り消されません。
offline_accessの場合、リフレッシュ トークンと許可は、許可の有効期限が切れるまで有効です。
許可の有効期間と offline_access の影響
- デフォルトの Logto 許可 TTL は 180 日です。
offline_accessが付与されている場合、セッション終了はそのアプリの許可をデフォルトで取り消しません。- その許可に関連付けられたリフレッシュ トークンチェーンは、許可が期限切れになるまで(または明示的に取り消されるまで)続行できます。
フェデレーテッドサインアウト:バックチャネルログアウト
クロスアプリの一貫性のために、Logto は バックチャネルログアウト をサポートしています。
ユーザーがあるアプリからサインアウトすると、Logto は同じセッションに参加しているすべてのアプリにログアウトトークンを送信して通知できます。
アプリのバックチャネル設定で Is session required が有効になっている場合、ログアウトトークンには Logto セッションを識別するための sid が含まれます。
一般的なフロー:
- ユーザーがあるアプリからサインアウトを開始します。
- Logto はセッション終了を処理し、登録されたバックチャネルログアウト URI にログアウトトークンを送信します。
- 各アプリはログアウトトークンを検証し、自身のローカルセッション / トークンをクリアします。
Logto SDK でのサインアウト方法
- SPA とウェブ:
client.signOut()はローカルトークンストレージをクリアし、Logto セッション終了エンドポイントにリダイレクトします。ログアウト後のリダイレクト URI を指定することができます。 - ネイティブ(React Native / Flutter を含む):通常はローカルトークンストレージのみをクリアします。セッションレスの WebView では、Logto ブラウザクッキーをクリアすることはありません。
セッションレス WebView をサポートしていないネイティブアプリケーションや、emphasized 設定を認識しないアプリケーション(React Native または Flutter SDK を使用する Android アプリ)では、認証リクエストに prompt=login パラメータを渡すことで、ユーザーに再度サインインを促すことができます。
アクセスごとに再認証を強制する
高セキュリティのアクションには、認証リクエストに prompt=login を含めて SSO をバイパスし、毎回資格情報の入力を強制します。
リフレッシュ トークンを受け取るために offline_access を要求する場合は、consent も含めてください。prompt=login consent。
一般的な組み合わせ設定:
prompt=login consent
よくある質問
バックチャネルログアウト通知を受け取っていません。
- Logto ダッシュボードでバックチャネルログアウト URI が正しく登録されていることを確認してください。
- アプリが同じユーザー / セッションコンテキストでアクティブなサインイン状態を持っていることを確認してください。
関連リソース
OIDC バックチャネルログアウトの理解