Identity Verification設定ガイド
このドキュメントの目的
Identity Verification(身元確認/eKYC)の設定方法を理解します。
所要時間
⏱️ 約20分
Identity Verificationとは
Identity VerificationはeKYC(electronic Know Your Customer)や本人確認プロセスを管理する機能です。
ユースケース:
- 顔認証による本人確認
- 身分証明書の検証
- 口座情報による本人確認
- VIPステータス確認
設定ファイル構造
identity-verification/face-verification.json
{
"id": "ed5c1717-98eb-4415-898d-6d4584810b5e",
"type": "face-verification",
"attributes": {
"label": "顔認証",
"provider": "external-provider"
},
"processes": {
"start": {
"execution": {
"type": "http_request",
"http_request": {
"url": "${VERIFICATION_API_URL}/verify/start",
"method": "POST",
"auth_type": "oauth2",
"oauth_authorization": {
"type": "client_credentials",
"token_endpoint": "${AUTH_URL}/token",
"client_id": "${CLIENT_ID}",
"client_secret": "${CLIENT_SECRET}"
}
}
},
"store": {
"application_details_mapping_rules": [
{
"from": "$.response_body.session_id",
"to": "verification_session.id"
}
]
},
"response": {
"body_mapping_rules": [
{
"from": "$.response_body.session_id",
"to": "session_id"
}
]
}
},
"check-status": {
"execution": {
"type": "http_request",
"http_request": {
"url": "${VERIFICATION_API_URL}/verify/status",
"method": "POST"
}
},
"transition": {
"approved": {
"any_of": [
[
{
"path": "$.response_body.status",
"type": "string",
"operation": "eq",
"value": "verified"
}
]
]
},
"rejected": {
"any_of": [
[
{
"path": "$.response_body.status",
"type": "string",
"operation": "eq",
"value": "failed"
}
]
]
}
}
}
}
}
主要なフィールド
基本情報
| フィールド | 必須 | 説明 |
|---|---|---|
id | ✅ | 設定ID(UUID) |
type | ✅ | 確認タイプ(任意の文字列) |
attributes | ❌ | 属性情報 |
processes | ✅ | プロセス定義 |
Processesセクション
各プロセス(start, check-status, cancel等)を定義:
{
"processes": {
"start": {...},
"check-status": {...},
"cancel": {...}
}
}
動的API生成:
POST /{tenant-id}/v1/me/identity-verification/applications/{type}/start
POST /{tenant-id}/v1/me/identity-verification/applications/{type}/check-status
POST /{tenant-id}/v1/me/identity-verification/applications/{type}/cancel
Processオブジェクト
各プロセスは7つのフェーズで構成:
| フェーズ | 説明 | 必須 |
|---|---|---|
request | リクエストスキーマ定義 | ❌ |
pre_hook | 実行前処理 | ❌ |
execution | メイン処理(外部API呼び出し等) | ✅ |
post_hook | 実行後処理 | ❌ |
transition | ステータス遷移条件 | ❌ |
store | 結果保存 | ❌ |
response | レスポンスマッピング | ❌ |
プロセス依存関係とシーケンス制御
複数のプロセスを順序立てて実行する必要がある場合、dependenciesフィールドで実行順序を制御できます。
dependencies フィールド
各プロセスにdependenciesを設定することで、前提となるプロセスの完了を必須化し、リトライポリシーを制御できます。
設定項目:
| フィールド | 型 | 説明 | 必須 |
|---|---|---|---|
required_processes | string[] | このプロセスを実行する前に完了が必要なプロセス名のリスト | ❌ |
allow_retry | boolean | プロセスの再実行を許可するか (true: 許可, false: 不可) | ✅ |
設定例
{
"processes": {
"apply": {
"dependencies": {
"required_processes": [],
"allow_retry": false
},
"pre_hook": {
"verifications": [
{
"type": "process_sequence"
}
]
},
"execution": {
"type": "no_action"
}
},
"crm-registration": {
"dependencies": {
"required_processes": ["apply"],
"allow_retry": false
},
"pre_hook": {
"verifications": [
{
"type": "process_sequence"
}
]
},
"execution": {
"type": "http_request",
"http_request": {
"url": "${CRM_API_URL}/register",
"method": "POST"
}
}
},
"request-ekyc": {
"dependencies": {
"required_processes": ["crm-registration"],
"allow_retry": true
},
"pre_hook": {
"verifications": [
{
"type": "process_sequence"
}
]
},
"execution": {
"type": "http_request",
"http_request": {
"url": "${EKYC_API_URL}/request",
"method": "POST"
}
}
}
}
}
動作の仕組み
- 依存関係チェック:
required_processesに指定されたプロセスがすべて正常完了している場合のみ実行可能 - リトライ制御:
allow_retry: falseのプロセスは一度だけ実行可能。再実行しようとするとエラー - process_sequence検証:
pre_hook.verificationsにprocess_sequenceタイプを追加することで依存関係を強制
実行順序の例
証券口座開設の3段階プロセス:
# 1. apply(基本情報入力)- 依存なし、リトライ不可
POST /{tenant-id}/v1/me/identity-verification/applications/account-opening/apply
→ 成功 (application_id: "abc-123" を取得)
# 2. crm-registration(CRM登録)- apply完了が必須、リトライ不可
POST /{tenant-id}/v1/me/identity-verification/applications/account-opening/abc-123/crm-registration
→ 成功
# 3. request-ekyc(eKYC実施)- crm-registration完了が必須、リトライ可
POST /{tenant-id}/v1/me/identity-verification/applications/account-opening/abc-123/request-ekyc
→ 成功
# 4. request-ekycの再実行(allow_retry: true のため成功)
POST /{tenant-id}/v1/me/identity-verification/applications/account-opening/abc-123/request-ekyc
→ 成功
エラーケース
依存関係違反:
# applyを実行せずにcrm-registrationを実行
POST /{tenant-id}/v1/me/identity-verification/applications/account-opening/crm-registration
エラーレスポンス:
{
"error": "pre_hook_validation_failed",
"error_messages": [
"Process 'crm-registration' requires completion of: apply"
]
}
リトライ禁止違反:
# apply実行後、再度applyを実行
POST /{tenant-id}/v1/me/identity-verification/applications/account-opening/abc-123/apply
エラーレスポンス:
{
"error": "pre_hook_validation_failed",
"error_messages": [
"Process 'apply' does not allow retry and has already been executed"
]
}
ユースケース
| シナリオ | 設定 |
|---|---|
| 線形フロー | apply → ekyc → callback という順序を強制 |
| ワンタイム処理 | 基本情報入力は一度だけ実行 (allow_retry: false) |
| リトライ可能処理 | 本人確認書類の撮影失敗時に再実行を許可 (allow_retry: true) |
| 複数依存 | プロセスDが「プロセスA」「プロセスB」「プロセスC」すべての完了を必要とする |
注意事項
- 循環依存の禁止: プロセスA → プロセスB → プロセスA のような循環依存は設定しない
- process_sequence検証必須: 依存関係を強制するには
pre_hook.verificationsにprocess_sequenceを追加 - リトライポリシー設計: ビジネス要件に応じて
allow_retryを適切に設定 - エラーハンドリング: クライアント側で依存関係エラーを適切に処理
参考: 身元確認申込みガイド - プロセス依存関係とシーケンス制御
Request Schema
リクエストボディのバリデーション(JSONSchema):
{
"request": {
"schema": {
"type": "object",
"required": ["user_id", "document_type"],
"properties": {
"user_id": {
"type": "string",
"description": "ユーザーID"
},
"document_type": {
"type": "string",
"enum": ["passport", "drivers_license"],
"description": "身分証明書タイプ"
}
}
}
}
}
動作: APIリクエスト受信時にJSONSchemaで検証。不正な場合は400エラー。
Pre Hook(実行前処理)
用途: メイン処理(execution)の前にビジネスロジック検証や追加データ取得を実行
Pre Hookは2つのコンポーネントで構成されます:
- Verifications: ビジネスロジック検証(プロセス依存関係、ユーザークレーム検証など)
- Additional Parameters: 追加データ取得(外部API呼び出しなど)
実行順序は常に Verifications → Additional Parameters です。
Verifications(検証処理)
実行前に各種ビジネスロジック検証を行います。
検証タイプ一覧:
| type | 概要 | 必須パラメータ |
|---|---|---|
process_sequence | プロセス依存関係とリトライ制御の検証 | なし |
user_claim | リクエスト内容とユーザークレームの一致確認 | details.verification_parameters |
application_limitation | 申込み可能数チェック(予定) | - |
duplicate_application | 重複申請チェック(予定) | - |
process_sequence 検証
用途: プロセスの実行順序を強制、リトライを制御
{
"pre_hook": {
"verifications": [
{
"type": "process_sequence"
}
]
},
"dependencies": {
"required_processes": ["apply"],
"allow_retry": false
}
}
動作:
required_processesに指定されたプロセスがすべて完了しているかチェックallow_retry: falseの場合、既に実行済みのプロセスの再実行を拒否
エラー例:
{
"error": "pre_hook_validation_failed",
"error_messages": [
"Process 'crm-registration' requires completion of: apply"
]
}
参考: プロセス依存関係とシーケンス制御
user_claim 検証
用途: リクエストデータとユーザー属性の一致を検証
{
"pre_hook": {
"verifications": [
{
"type": "user_claim",
"details": {
"verification_parameters": [
{
"request_json_path": "$.mobile_phone_number",
"user_claim_json_path": "phone_number"
},
{
"request_json_path": "$.email",
"user_claim_json_path": "email"
}
]
}
}
]
}
}
パラメータ説明:
| フィールド | 説明 |
|---|---|
request_json_path | リクエストから値を取得するJSONPath(例: $.mobile_phone_number) |
user_claim_json_path | ユーザークレームから値を取得するキー(例: phone_number) |
動作:
- リクエストの
mobile_phone_numberとユーザーのphone_numberを比較 - 一致しない場合はエラー
エラー例:
{
"error": "pre_hook_validation_failed",
"error_messages": [
"User claim verification failed: mobile_phone_number mismatch"
]
}
ユースケース:
- 口座開設時に登録済みメールアドレスとの一致を確認
- 電話番号認証済みユーザーのみ申込み可能にする
複数検証の組み合わせ
複数の検証を設定順に実行できます:
{
"pre_hook": {
"verifications": [
{
"type": "process_sequence"
},
{
"type": "user_claim",
"details": {
"verification_parameters": [
{
"request_json_path": "$.email",
"user_claim_json_path": "email"
}
]
}
}
]
}
}
実行順序: process_sequence検証 → user_claim検証
いずれかが失敗した場合: 処理は中断され、400エラーを返却
条件付き実行(Conditional Execution)
Verificationsコンポーネントにconditionフィールドを追加することで、実行を動的に制御できます。
メリット:
- パフォーマンス最適化(不要な検 証をスキップ)
- リスクベースの認証制御
- 柔軟なビジネスロジック実装
条件演算子一覧:
| 演算子 | 説明 | 例 |
|---|---|---|
eq | 等しい | {"operation": "eq", "path": "$.user.role", "value": "admin"} |
ne | 等しくない | {"operation": "ne", "path": "$.user.status", "value": "suspended"} |
gt | より大きい | {"operation": "gt", "path": "$.request_body.amount", "value": 1000} |
gte | 以上 | {"operation": "gte", "path": "$.request_body.amount", "value": 100000} |
lt | より小さい | {"operation": "lt", "path": "$.risk_score", "value": 50} |
lte | 以下 | {"operation": "lte", "path": "$.retry_count", "value": 3} |
in | 含まれる | {"operation": "in", "path": "$.user.country", "value": ["US", "EU", "JP"]} |
nin | 含まれない | {"operation": "nin", "path": "$.user.status", "value": ["banned"]} |
exists | 存在する | {"operation": "exists", "path": "$.user.verified"} |
missing |