ユーザーに ID プロバイダを選択させて、その ID プロバイダにユーザーを受け渡す。
以降、箇条書きに以下の構造を持たせることがある。
- if
- then
- else if
- then
- else
エンドポイント名 | 機能 |
---|---|
開始 | 選択処理を開始する |
選択 | 選択した ID プロバイダにリダイレクトさせる |
選択 UI | 選択 UI を提供する |
開始、選択エンドポイントではセッションを利用する。
開始、選択エンドポイントへのリクエスト時に、有効なセッションが宣言されなかった場合、セッションを発行する。 開始エンドポイントへのリクエスト時に、セッションの期限に余裕がない場合、設定を引き継いだセッションを発行する。
開始、選択エンドポイントからのレスポンス時に、未通知のセッション ID を通知する。
ID プロバイダ選択処理を開始する。
まず、セッションにリクエスト内容を紐付ける。
- リクエストに
prompt
パラメータを含み、その値がselect_account
を含む場合、- 選択 UI エンドポイントにリダイレクトさせる。
- そうでなく、ID プロバイダに紐付くセッションである場合、
- ID プロバイダにリダイレクトさせる。
- そうでなければ、選択 UI エンドポイントにリダイレクトさせる。
選択 UI エンドポイントへのリダイレクト時には、チケットを発行する。 チケットをセッションに紐付ける。 チケットをフラグメントとして付加した選択 UI エンドポイントにリダイレクトさせる。
ID プロバイダへのリダイレクト時には、セッションからリクエスト内容とチケットへの紐付けを解く。 リクエスト内容を付加した ID プロバイダのユーザー認証エンドポイントにリダイレクトさせる。
GET /?response_type=code%20id_token&scope=openid
&client_id=https%3A%2F%2Fta.example.org
&redirect_uri=https%3A%2F%2Fta.example.org%2Freturn&state=Ito-lCrO2H
&nonce=v46QjbP6Qr HTTP/1.1
Host: selector.example.org
Cookie: Idp-Selector=caiQ2D0ab04N0EPdCcG2OnB4SyBnME
改行とインデントは表示の都合による。
選択 UI へのリダイレクト例。
HTTP/1.1 302 Found
Location: /ui/select.html#CgKa4ugl_k
改行とインデントは表示の都合による。
ID プロバイダが選択された後の処理をする。
- チケットと紐付くセッションでない場合、
- エラーを返す。
- そうでなければ、リクエストから以下のパラメータを取り出す。
パラメータ名 | 必要性 | 値 |
---|---|---|
ticket |
必須 | チケット |
issuer |
必須 | 選択された ID プロバイダの ID |
locale |
任意 | 選択された表示言語 |
- チケットがセッションに紐付くものと異なる、または、ID プロバイダが正当でない場合、
- エラーを返す。
- そうでなければ、ID プロバイダをセッションに紐付ける。 ID プロバイダにリダイレクトさせる。
POST /select HTTP/1.1
Host: selector.example.org
Cookie: Idp-Selector=caiQ2D0ab04N0EPdCcG2OnB4SyBnME
Content-Type: application/x-www-form-urlencoded
ticket=CgKa4ugl_k&issuer=https%3A%2F%2Fidp.example.org
HTTP/1.1 302 Found
Location: https://idp.example.org/auth?response_type=code%20id_token
&scope=openid&client_id=https%3A%2F%2Fta.example.org
&redirect_uri=https%3A%2F%2Fta.example.org%2Freturn&state=Ito-lCrO2H
&nonce=v46QjbP6Qr
改行とインデントは表示の都合による。
本パッケージでは提供しない。 以下は要件。
ID プロバイダ選択用の UI を提供する。 UI の目的は、選択エンドポイントに POST させること。
以下のパラメータを受け付ける。
パラメータ名 | 必要性 | 値 |
---|---|---|
issuers |
任意 | 特に候補になる ID プロバイダの ID の JSON 配列 |
display |
任意 | OpenID Connect Core 1.0 Section 3.1.2.1 の display と同じもの |
locales |
任意 | OpenID Connect Core 1.0 Section 3.1.2.1 の ui_locales と同じもの |
エラーは OAuth 2.0 Section 4.1.2.1 の形式で返す。 セッションからリクエスト内容とチケットへの紐付けを解く。