認可コードフロー デバイス認証拡張
概要
認可コードフローの中で、ブラウザとは別の認証デバイス(スマートフォンアプリ等)に認証を委ねるための、idp-server 独自のプロトコル拡張です。
ブラウザの認可リクエストで開始し、サインイン画 面とデバイスが別チャネルで進行します。サインイン画面は /authentication-status のポーリングで完了を検知します。
シーケンス
ブラウザ(SPA) idp-server 認証デバイス
│ │ │
├─ GET /v1/authorizations ──────▶ │
│◀─ 302 サインイン画面へ (id 付与) │ │
├─ GET /{id}/view-data ─────────▶ │
│ │ │
├─ POST /{id}/authentication-device-number-matching-challenge ─▶│
│◀─ { number_matching_code } │ コードを生成・サーバー保存 │
├─ 画面にコードを表示 │ │
│ │ │
├─ POST /{id}/authentication-device-notification ──────────────▶│ (任意)
│ │─── push ────────────────────▶│
│ │ │
│ │◀── GET /v1/authentication-devices/{device-id}/authentications
│ │ │
│ │◀── POST /{id}/authentication-device-number-matching
│ │ ユーザーが画面から転記したコード + device_id
│ │ │
│ │◀── POST /v1/authentications/{transaction-id}/fido-uaf-authentication-challenge
│ │◀── POST /v1/authentications/{transaction-id}/fido-uaf-authentication
│ │ │
├─ GET /{id}/authentication-status ──▶ success │
├─ POST /{id}/authorize ─────────▶ │
│◀─ 302 redirect_uri?code=... │ │
エンドポイント体系
サインイン画面側
| エンドポイント | 用途 |
|---|---|
GET /{tenant-id}/v1/authorizations | 認可リクエスト。サインイン画面へリダイレクトし、トランザクション id を付与 |
GET /{tenant-id}/v1/authorizations/{id}/view-data | 画面表示用データ(クライアント名・スコープ等)の取得 |
POST /{tenant-id}/v1/authorizations/{id}/{interaction-type} | 認証インタラクションの実行 |
GET /{tenant-id}/v1/authorizations/{id}/authentication-status | 認証完了のポーリング。status は in_progress / success / failure / locked |
POST /{tenant-id}/v1/authorizations/{id}/authorize | 認可の確定。redirect_uri へ認可コードを返す |
{interaction-type} のうち本拡張で使うもの:
| 値 | 呼び出し元 | 用途 |
|---|---|---|
authentication-device-number-matching-challenge | サインイン画面 | ナンバーマッチングコードの発行 |
authentication-device-notification | サインイン画面 | デバイスへのプッシュ送信(任意) |
authentication-device-number-matching | 認証デバイス | コードの検証 |
authentication-device-deny | 認証デバイス | 認証の拒否 |