APIキー認証の設定確認(OpenAPI 3.0)

APIキーの送信場所と漏えい防止の設定を確認する必要がある状態

説明

apiKey は有効な認証方式であり、セキュリティスキームの宣言自体が秘密のキーの漏えいを意味するわけではありません。ただし、クエリ文字列で送るキーはURLのログなどに残る可能性があるため、送信方法と管理方法を確認する必要があります。

想定される影響

漏えいしたキーを入手した人が、そのキーに許可された権限でAPIを呼び出す可能性があります。

対処方法

APIキーはURLではなくヘッダーに入れ、HTTPSで送信してください。ログへの記録を防ぎ、漏えいしたキーは失効させて再発行してください。ユーザーごとの権限委譲が必要な場合は、OAuth2などの適切な方式を検討してください。

例

次の抜粋では、クエリ文字列のAPIキー認証をOAuth2に変更する選択肢を示しています。APIキーを維持してHTTPSとヘッダーを使うこともできます。スキームの変更だけでは認証の動作は変わらないため、サーバーとクライアントも合わせて設定する必要があります。

変更前

json
{
  "openapi": "3.0.0",
  "security": [
    {
      "apiKeyAuth": []
    }
  ],
  "components": {
    "securitySchemes": {
      "apiKeyAuth": {
        "type": "apiKey",
        "name": "X-API-Key",
        "in": "query"
      }
    }
  }
}

変更後

json
{
  "openapi": "3.0.0",
  "security": [
    {
      "oauthAuth": []
    }
  ],
  "components": {
    "securitySchemes": {
      "oauthAuth": {
        "type": "oauth2",
        "flows": {
          "authorizationCode": {
            "authorizationUrl": "https://example.com/api/oauth/dialog",
            "tokenUrl": "https://example.com/api/oauth/token",
            "scopes": {
              "read:pets": "read your pets"
            }
          }
        }
      }
    }
  }
}

参考資料