ユースケース — マルチアカウントチューザ
prompt=select_account とは
OIDC Core 1.0 §3.1.2.1 では、RP が /authorize に prompt 要求パラメータを乗せられます。本ページに関係するのは次の 3 値:
prompt= | OP に依頼する内容 |
|---|---|
none | UI を一切出さない — 既存セッションを返すか失敗するか |
login | 既存セッションがあっても再ログインを強制 |
select_account | アカウント選択 UI を表示 — ユーザが続行するアカウントを選ぶ |
select_account は、大手 SaaS の「アカウント切り替え」ボタンが裏で発火する仕様です。1 ブラウザで同じ OP に複数アカウント(仕事 + 個人、alice + bob 等)にサインイン中の状態に対して、OP が一覧を出してユーザに選ばせる。
本ライブラリではこれをセッションマネージャの chooser group(同一ブラウザで同時に有効なセッション群)として実装し、追加・切替・全ログアウトの API を提供します。
このページで触れる仕様
- OpenID Connect Core 1.0 — §3.1.2.1(
promptパラメータ)、§3.1.2.4(同意との相互作用) - OpenID Connect Back-Channel Logout 1.0 — 「全員ログアウト」発火時の fan-out
用語の補足
promptパラメータ — RP が/authorizeに乗せて、OP に UI の出し方を指示するヒントです。none(UI を出さず、既存セッションを返すか失敗)、login(再ログイン強制)、consent(同意プロンプト強制)、select_account(アカウント選択 UI)の 4 種があり、空白区切りで複数指定できます。- Chooser group — 同一ブラウザで同時にサインイン中のセッション群。大手 SaaS では「アカウント切り替え」メニューとして表面化します。OP がサーバ側で group を保持し、cookie はブラウザを単一セッションではなく group に紐づけます。
sub(subject) — OP-RP ペアごとにスコープされる、ユーザの安定不透明識別子です。chooser でアカウントを切り替えると、次のid_tokenに乗るsubが変わります — 同じブラウザ、別の identity ということになります。
動作
実装
prompt=select_account 用の interaction はビルトイン。アクティブな chooser group の全アカウントを並べた interaction.ChooserPromptData envelope を返します。SPA 側は選択結果として SessionID を送り返します:
go
op.New(
/* 必須オプション */
op.WithChooserUI(op.ChooserUI{Template: chooserTmpl}), // 任意 — デフォルトテンプレート同梱
)セッションマネージャの公開 API:
| メソッド | タイミング |
|---|---|
Sessions.Issue(ctx, subject) | 初回ログイン → 新 chooser group |
Sessions.AddAccount(ctx, group, subject) | 同ブラウザで 2 人目 → 既存 group に追加 |
Sessions.Switch(ctx, group, sessionID) | chooser でアカウントを選択 |
Sessions.LogoutAll(ctx, group) | 全員ログアウト |
続きはこちら
- SPA / カスタム interaction — chooser を SPA から駆動。
- Back-Channel Logout — 全員ログアウト時の fan-out。