Rokad
すべてのドキュメント
dhalドキュメント

レート制限と ID

IP、ルート、ユーザー、テナント、API キーからレート制限キーを構成します。

リポジトリを見る
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 }
    }
  }
}

利用可能な要素は iprouteuserIdtenantIdapiKeyId です。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 または同等の原子的な共有ストアを使用します。