コンテンツにスキップ

フロー管理

概要

フロー管理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

クエリパラメータ

パラメータ必須説明
limitinteger-取得件数(デフォルト: 20、最大: 100)
cursorstring-ページネーションカーソル
typestring-フロータイプでフィルタ
statusstring-ステータスでフィルタ(active, inactive, draft

リクエスト例

Terminal window
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

パスパラメータ

パラメータ必須説明
idstringフローID

リクエスト例

Terminal window
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

リクエストボディ

フィールド必須説明
namestringフロー名(英数字、ハイフン)
display_namestring表示名
descriptionstring-説明
typestringフロータイプ
graphobjectフローグラフ定義

フロータイプ

タイプ説明
loginログインフロー
registrationユーザー登録フロー
password_resetパスワードリセットフロー
mfa_setupMFA設定フロー
account_recoveryアカウント復旧フロー

リクエスト例

Terminal window
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

リクエスト例

Terminal window
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

リクエスト例

Terminal window
curl -X DELETE "https://{tenant-domain}/api/admin/flows/flow_social_login" \
-H "Authorization: Bearer {token}"

フロー検証

フローの定義が正しいか検証します。

エンドポイント

POST /api/admin/flows/:id/validate

リクエスト例

Terminal window
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

リクエスト例

Terminal window
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

リクエスト例

Terminal window
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

リクエスト例

Terminal window
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_verificationMFA検証
otp_inputワンタイムパスワード入力

制御ノード

タイプ説明
startフロー開始
successフロー成功終了
failureフロー失敗終了
condition条件分岐
switch複数分岐

アクションノード

タイプ説明
send_emailメール送信
send_smsSMS送信
webhookWebhook呼び出し
set_attribute属性設定