フロー管理
概要
フロー管理APIは、カスタム認証フローを定義・管理するためのエンドポイントを提供します。グラフベースのフロー定義により、複雑な認証シナリオを柔軟に構築できます。
エンドポイント一覧
| メソッド | エンドポイント | 説明 |
|---|---|---|
| GET | /api/admin/flows | フロー一覧取得 |
| GET | /api/admin/flows/:id | フロー詳細取得 |
| POST | /api/admin/flows | フロー作成 |
| PUT | /api/admin/flows/:id | フロー更新 |
| DELETE | /api/admin/flows/:id | フロー削除 |
| POST | /api/admin/flows/:id/validate | フロー検証 |
| POST | /api/admin/flows/:id/compile | フローコンパイル |
| POST | /api/admin/flows/:id/activate | フロー有効化 |
| POST | /api/admin/flows/:id/deactivate | フロー無効化 |
フロー一覧取得
テナント内のフロー一覧を取得します。
エンドポイント
GET /api/admin/flows
クエリパラメータ
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
limit | integer | - | 取得件数(デフォルト: 20、最大: 100) |
cursor | string | - | ページネーションカーソル |
type | string | - | フロータイプでフィルタ |
status | string | - | ステータスでフィルタ(active, inactive, draft) |
リクエスト例
curl -X GET "https://{tenant-domain}/api/admin/flows?type=login" \ -H "Authorization: Bearer {token}"レスポンス例
{ "items": [ { "id": "flow_login_default", "name": "default-login", "display_name": "デフォルトログインフロー", "type": "login", "status": "active", "version": 3, "created_at": 1705881600, "updated_at": 1706054400 }, { "id": "flow_login_mfa", "name": "mfa-login", "display_name": "MFA付きログインフロー", "type": "login", "status": "active", "version": 1, "created_at": 1705968000, "updated_at": 1705968000 } ], "total": 5, "cursor": null}フロー詳細取得
指定されたフローの詳細情報を取得します。
エンドポイント
GET /api/admin/flows/:id
パスパラメータ
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
id | string | ○ | フローID |
リクエスト例
curl -X GET "https://{tenant-domain}/api/admin/flows/flow_login_mfa" \ -H "Authorization: Bearer {token}"レスポンス例
{ "id": "flow_login_mfa", "name": "mfa-login", "display_name": "MFA付きログインフロー", "description": "パスワード認証後にMFA検証を行うフロー", "type": "login", "status": "active", "version": 1, "graph": { "nodes": [ { "id": "start", "type": "start", "position": { "x": 0, "y": 0 } }, { "id": "identifier", "type": "identifier_input", "config": { "identifier_types": ["email", "username"] }, "position": { "x": 200, "y": 0 } }, { "id": "password", "type": "password_input", "position": { "x": 400, "y": 0 } }, { "id": "mfa_check", "type": "condition", "config": { "condition": "user.mfa_enabled" }, "position": { "x": 600, "y": 0 } }, { "id": "mfa_verify", "type": "mfa_verification", "config": { "methods": ["totp", "sms"] }, "position": { "x": 800, "y": -100 } }, { "id": "success", "type": "success", "position": { "x": 1000, "y": 0 } } ], "edges": [ { "source": "start", "target": "identifier" }, { "source": "identifier", "target": "password" }, { "source": "password", "target": "mfa_check" }, { "source": "mfa_check", "target": "mfa_verify", "condition": "true" }, { "source": "mfa_check", "target": "success", "condition": "false" }, { "source": "mfa_verify", "target": "success" } ] }, "compiled": true, "compiled_at": 1705968000, "created_at": 1705968000, "updated_at": 1705968000}フロー作成
新しいフローを作成します。
エンドポイント
POST /api/admin/flows
リクエストボディ
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
name | string | ○ | フロー名(英数字、ハイフン) |
display_name | string | ○ | 表示名 |
description | string | - | 説明 |
type | string | ○ | フロータイプ |
graph | object | ○ | フローグラフ定義 |
フロータイプ
| タイプ | 説明 |
|---|---|
login | ログインフロー |
registration | ユーザー登録フロー |
password_reset | パスワードリセットフロー |
mfa_setup | MFA設定フロー |
account_recovery | アカウント復旧フロー |
リクエスト例
curl -X POST "https://{tenant-domain}/api/admin/flows" \ -H "Authorization: Bearer {token}" \ -H "Content-Type: application/json" \ -d '{ "name": "social-login", "display_name": "ソーシャルログインフロー", "description": "ソーシャルプロバイダーを使用したログイン", "type": "login", "graph": { "nodes": [ { "id": "start", "type": "start" }, { "id": "provider_select", "type": "social_provider_select", "config": { "providers": ["google", "github"] } }, { "id": "success", "type": "success" } ], "edges": [ { "source": "start", "target": "provider_select" }, { "source": "provider_select", "target": "success" } ] } }'レスポンス例
{ "id": "flow_social_login", "name": "social-login", "display_name": "ソーシャルログインフロー", "type": "login", "status": "draft", "version": 1, "compiled": false, "created_at": 1706140800}フロー更新
既存のフローを更新します。
エンドポイント
PUT /api/admin/flows/:id
リクエスト例
curl -X PUT "https://{tenant-domain}/api/admin/flows/flow_social_login" \ -H "Authorization: Bearer {token}" \ -H "Content-Type: application/json" \ -d '{ "display_name": "ソーシャルログインフロー(更新)", "graph": { "nodes": [ { "id": "start", "type": "start" }, { "id": "provider_select", "type": "social_provider_select", "config": { "providers": ["google", "github", "apple"] } }, { "id": "success", "type": "success" } ], "edges": [ { "source": "start", "target": "provider_select" }, { "source": "provider_select", "target": "success" } ] } }'フロー削除
フローを削除します。
エンドポイント
DELETE /api/admin/flows/:id
リクエスト例
curl -X DELETE "https://{tenant-domain}/api/admin/flows/flow_social_login" \ -H "Authorization: Bearer {token}"フロー検証
フローの定義が正しいか検証します。
エンドポイント
POST /api/admin/flows/:id/validate
リクエスト例
curl -X POST "https://{tenant-domain}/api/admin/flows/flow_social_login/validate" \ -H "Authorization: Bearer {token}"レスポンス例(成功)
{ "valid": true, "warnings": [ { "code": "unused_node", "message": "ノード 'fallback' は到達不能です", "node_id": "fallback" } ]}レスポンス例(エラー)
{ "valid": false, "errors": [ { "code": "missing_start_node", "message": "フローに開始ノードがありません" }, { "code": "unreachable_success", "message": "成功ノードに到達するパスがありません" }, { "code": "invalid_edge", "message": "エッジ 'password->mfa' のターゲットノードが存在しません", "edge": { "source": "password", "target": "mfa" } } ]}フローコンパイル
フローを実行可能な形式にコンパイルします。
エンドポイント
POST /api/admin/flows/:id/compile
リクエスト例
curl -X POST "https://{tenant-domain}/api/admin/flows/flow_social_login/compile" \ -H "Authorization: Bearer {token}"レスポンス例
{ "id": "flow_social_login", "compiled": true, "compiled_at": 1706227200, "version": 2}フロー有効化
フローを有効化します。
エンドポイント
POST /api/admin/flows/:id/activate
リクエスト例
curl -X POST "https://{tenant-domain}/api/admin/flows/flow_social_login/activate" \ -H "Authorization: Bearer {token}"レスポンス例
{ "id": "flow_social_login", "status": "active", "activated_at": 1706313600}フロー無効化
フローを無効化します。
エンドポイント
POST /api/admin/flows/:id/deactivate
リクエスト例
curl -X POST "https://{tenant-domain}/api/admin/flows/flow_social_login/deactivate" \ -H "Authorization: Bearer {token}"レスポンス例
{ "id": "flow_social_login", "status": "inactive", "deactivated_at": 1706400000}ノードタイプ一覧
入力ノード
| タイプ | 説明 |
|---|---|
identifier_input | ユーザー識別子入力(メール、ユーザー名等) |
password_input | パスワード入力 |
social_provider_select | ソーシャルプロバイダー選択 |
mfa_verification | MFA検証 |
otp_input | ワンタイムパスワード入力 |
制御ノード
| タイプ | 説明 |
|---|---|
start | フロー開始 |
success | フロー成功終了 |
failure | フロー失敗終了 |
condition | 条件分岐 |
switch | 複数分岐 |
アクションノード
| タイプ | 説明 |
|---|---|
send_email | メール送信 |
send_sms | SMS送信 |
webhook | Webhook呼び出し |
set_attribute | 属性設定 |