OpenAPI 3.0の再利用可能なBasic認証定義を確認

再利用可能な認証定義と、それを適用する認証要件を区別して確認してください。

説明

OpenAPI 3.0のcomponents.securitySchemesにBasic認証を定義しても、すべての操作に自動で適用されるわけではありません。その定義を参照するsecurity設定が使用箇所を指定します。type: httpはHTTP認証の分類であり、HTTPSを使うかどうかは接続先と実際の接続設定で決まります。

想定される影響

暗号化されていない接続でBasic認証情報を送信すると、ユーザー名やパスワードが漏えいするおそれがあります。盗まれたパスワードが再利用されるリスクもあります。

対処方法

Basic認証を使う接続にはHTTPSと証明書検証を適用してください。ユーザーの権限委譲が必要なら、PKCEを使うOAuth2認可コードフローを検討し、実際の認可サーバー、クライアント、全体または操作ごとのsecurityを合わせて設定してください。

例

変更前はHTTPの接続先とBasic認証を定義していますが、それを適用するsecurity要件はありません。変更後はHTTPSとOAuth2を指定し、全体の認証要件も追加しています。

変更前

json
{
  "openapi": "3.0.0",
  "servers": [
    {
      "url": "http://kicsapi.server.com/"
    }
  ],
  "components": {
    "securitySchemes": {
      "regularSecurity": {
        "type": "http",
        "scheme": "basic"
      }
    }
  }
}

変更後

json
{
  "openapi": "3.0.0",
  "servers": [
    {
      "url": "https://kicsapi.server.com/"
    }
  ],
  "components": {
    "securitySchemes": {
      "OAuth2": {
        "type": "oauth2",
        "flows": {
          "authorizationCode": {
            "authorizationUrl": "https://kicsapi.com/oauth/authorize",
            "tokenUrl": "https://kicsapi.com/oauth/token",
            "scopes": {
              "write": "modify objects",
              "read": "read objects"
            }
          }
        }
      }
    }
  },
  "security": [
    {
      "OAuth2": [
        "write",
        "read"
      ]
    }
  ]
}

参考資料