スキーマバリデーション(JSON Schema)
前提知識
このドキュメントを理解するには、以下の基礎知識が役立ちます:
概要
idp-server は、JSON Schemaを用いた柔軟かつ厳格なデータ検証機能を提供します。
JSON Schemaバリデーションとは、JSONデータの構造・型・制約を定義し、リクエストやレスポンスが仕様に準拠しているかを自動的に検証する仕組みです。
idp-serverでは以下のような用途に対応できます:
- 初期登録: ユーザー属性の柔軟な定義とバリデーション
- 身元確認申込み: 外部eKYCサービスとの連携時のデータ検証
- 外部API連携: リクエスト/レスポンスの型安全性確保
- マルチテナント: テナントごとの独自検証ルール定義
なぜJSON Schemaを採用したのか
1. 柔軟性と拡張性
従来の固定的なバリデーションロジックでは、テナントごとの要件変更に対応できません。
従来の問題 点:
// ❌ 固定的なバリデーション - テナントごとの要件変更に対応不可
if (request.email == null || !request.email.matches("^[a-z]+@[a-z]+\\.[a-z]+$")) {
throw new ValidationException("invalid email");
}
if (request.age < 18) {
throw new ValidationException("age must be 18 or over");
}
JSON Schemaによる解決:
{
"properties": {
"email": {
"type": "string",
"format": "email"
},
"age": {
"type": "integer",
"minimum": 18
}
}
}
メリット:
- テナントごとに異なる検証ルールを定義可能
- コード変更不要で検証ロジックを変更可能
- Control Plane APIで動的に設定を更新可能
2. 外部サービス連携の型安全性
外部eKYCサービスとの連携では、サービスごとに異なるAPI仕様に対応する必要があります。
メリット:
- 外部サービスAとBで異なる要求項目を柔軟に定義
- データ変換ミスを早期検出
- 外部サービスの仕様変更に素早く対応
3. セキュリティ向上
JSON Schemaによる厳格な検証は、セキュリティ脅威を防止します。
防止できる脅威:
インジェクション攻撃
{
"properties": {
"username": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+$",
"maxLength": 50
}
}
}
→ SQLインジェクション、XSS攻撃のリスクを軽減
データ型の厳格化
{
"properties": {
"age": {
"type": "integer",
"minimum": 0,
"maximum": 150
}
}
}
→ 型混乱攻撃(Type Confusion)を防止
データサイズ制限
{
"properties": {
"address": {
"type": "string",
"maxLength": 500
}
}
}
→ DoS攻撃(巨大データ送信)を防止
4. 標準仕様準拠
JSON Schemaは業界標準であり、多くのツールやライブラリがサポートしています。
メリット:
- OpenAPI仕様との連携が容易
- バリデーションロジックの再利用が可能
- エコシステムが豊富(エディタのサポート、自動生成ツール等)
準拠仕様:
- JSON Schema Draft 2020-12
- OpenAPI 3.0/3.1
- OpenID Connect for Identity Assurance (OIDC4IDA)