dhalドキュメント
9ページ中5ページDhal は IP だけでなく、ルート、ユーザー、テナント、API キーを使って制限できます。認証済み API やマルチテナントシステムでは、IP のみに依存するより安全です。
json
{
"rateLimit": {
"enabled": true,
"store": "memory",
"keyBy": ["ip", "route"],
"default": { "windowSeconds": 60, "max": 120 },
"routes": {
"/api/search": { "windowSeconds": 60, "max": 30 }
}
}
}利用可能な要素は ip、route、userId、tenantId、apiKeyId です。credential stuffing では userAgent も利用できます。
| 用途 | 推奨キー |
|---|---|
| 公開エンドポイント | ip, route |
| 認証済み操作 | userId, route |
| テナント単位のクォータ | tenantId, route |
| API 連携 | apiKeyId, route |
| ログイン | ip, route, 必要に応じて userAgent |
ID ヘッダー
json
{
"identity": {
"headers": {
"userId": ["x-dhal-user-id", "x-user-id"],
"tenantId": ["x-dhal-tenant-id", "x-tenant-id"],
"apiKeyId": ["x-dhal-api-key-id", "x-api-key-id"]
}
}
}認証レイヤーまたは信頼できるゲートウェイが削除して再設定するヘッダーだけを信頼してください。公開クライアントの値をそのまま受け入れないでください。
ルート別制限
json
{
"routes": {
"/api/export": {
"mode": "block",
"rateLimit": {
"enabled": true,
"windowSeconds": 3600,
"max": 10,
"keyBy": ["tenantId", "userId"]
}
}
}
}メモリーストアは開発、テスト、単一プロセス向けです。水平スケールする本番環境では RedisRateLimitStore または同等の原子的な共有ストアを使用します。