전역 API 키 인증의 전송 보안 점검 (OpenAPI 3.0)

전역 API 키 인증에 HTTPS가 필요한 경우

설명

전역 security에 API 키 인증을 지정했다면 해당 인증을 사용하는 요청에서 키를 HTTPS로 전달해야 합니다. 암호화하지 않은 HTTP로 보내면 전송 중 키가 노출될 수 있습니다.

잠재적 영향

통신을 엿보는 사람이 키를 입수해 해당 키에 허용된 권한으로 API를 호출할 수 있습니다.

해결 방법

API 서버와 클라이언트가 HTTPS만 사용하도록 구성하고 문서에도 반영하세요. OpenAPI 3.0에서는 servers의 URL, 2.0에서는 schemes를 확인하세요. 키는 URL 대신 헤더로 보내고 로그에 남기지 마세요.

예시

다음 OpenAPI 3.0 발췌 예시는 API 서버 URL을 HTTP에서 HTTPS로 바꾸고 OAuth2를 사용하는 선택지를 보여 줍니다. OAuth2로 바꾸더라도 API 통신에 HTTPS가 필요하며, API 키를 유지하면서 HTTPS와 헤더를 사용해도 됩니다. 문서와 실제 서버·클라이언트 설정을 일치시키세요.

변경 전

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

변경 후

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

참조