작업별 API 키 인증의 전송 보안 점검 (OpenAPI 3.0)

개별 API 작업의 키 인증에 HTTPS가 필요한 경우

설명

개별 API 작업의 security에서 API 키 인증을 지정하는 것은 유효한 구성입니다. 해당 작업을 암호화하지 않은 HTTP로 호출하면 전송 중 키가 노출될 수 있으므로 HTTPS가 필요합니다.

잠재적 영향

노출된 키를 입수한 사람이 해당 키에 허용된 API 작업을 실행할 수 있습니다.

해결 방법

해당 작업의 서버와 클라이언트에 HTTPS를 적용하고 키를 URL 대신 헤더로 보내세요. 문서와 실제 인증 정책을 일치시키고 로그에 키가 남지 않도록 하세요. 노출된 키는 폐기·교체하세요.

예시

다음 OpenAPI 3.0 발췌 예시는 /pets 작업의 API 서버 URL에 HTTPS를 적용하고 인증을 OAuth2로 바꾸는 선택지를 보여 줍니다. OAuth2만으로 API 통신이 암호화되지는 않습니다. API 키를 유지하면서 HTTPS와 헤더를 사용해도 되며, 실제 서버와 클라이언트에도 적용해야 합니다.

변경 전

json
{
  "openapi": "3.0.0",
  "servers": [{"url": "http://api.example.com"}],
  "paths": {
    "/pets": {
      "post": {
        "security": [
          {
            "apiKeyAuth": []
          }
        ]
      }
    }
  },
  "components": {
    "securitySchemes": {
      "apiKeyAuth": {
        "type": "apiKey",
        "name": "X-API-Key",
        "in": "query"
      }
    }
  }
}

변경 후

json
{
  "openapi": "3.0.0",
  "servers": [{"url": "https://api.example.com"}],
  "paths": {
    "/pets": {
      "post": {
        "security": [
          {
            "OAuth2": [
              "write",
              "read"
            ]
          }
        ]
      }
    }
  },
  "components": {
    "securitySchemes": {
      "OAuth2": {
        "type": "oauth2",
        "flows": {
          "authorizationCode": {
            "authorizationUrl": "https://example.com/oauth/authorize",
            "tokenUrl": "https://example.com/oauth/token",
            "scopes": {
              "write": "modify objects in your account",
              "read": "read objects in your account"
            }
          }
        }
      }
    }
  }
}

참조