전역 security의 빈 객체

전역 security 배열의 빈 요구사항 객체는 인증 없는 접근을 허용하는 선택지가 됩니다.

설명

전역 security 배열의 빈 요구사항 객체 {}는 인증 없는 접근을 허용하는 선택지입니다. 다른 항목에 인증을 지정해도 요구사항 중 하나만 충족하면 되므로 인증은 선택 사항입니다. 반면 security: {}처럼 필드 자체를 객체로 지정하면 배열을 요구하는 OpenAPI 형식에 맞지 않습니다.

잠재적 영향

공통 인증을 의도했다면, 이를 따르는 작업이 명세상 익명 접근도 허용하게 됩니다. 클라이언트와 서버가 서로 다른 접근 정책을 적용할 수 있습니다.

해결 방법

인증이 필수라면 배열의 빈 객체를 제거하고 정의된 인증 방식만 참조하세요. security 자체는 배열이어야 하므로 security: {}는 유효한 형식이 아닙니다. 공개 접근을 허용할지는 실제 서비스 정책에 따라 결정하세요.

예시

예시는 빈 요구사항을 exampleSecurity API 키 요구사항으로 바꿉니다. 서버에서도 같은 인증 정책을 적용해야 합니다.

변경 전

json
{
  "openapi": "3.0.0",
  "paths": {
    "/": {
      "get": {
        "responses": {
          "200": {
            "description": "ok"
          }
        }
      }
    }
  },
  "security": [
    {}
  ],
  "info": {
    "title": "Simple API overview",
    "version": "1.0.0"
  },
  "components": {
    "securitySchemes": {
      "exampleSecurity": {
        "type": "apiKey",
        "in": "header",
        "name": "X-API-Key"
      }
    }
  }
}

변경 후

json
{
  "openapi": "3.0.0",
  "paths": {
    "/": {
      "get": {
        "responses": {
          "200": {
            "description": "ok"
          }
        }
      }
    }
  },
  "security": [
    {
      "exampleSecurity": []
    }
  ],
  "info": {
    "title": "Simple API overview",
    "version": "1.0.0"
  },
  "components": {
    "securitySchemes": {
      "exampleSecurity": {
        "type": "apiKey",
        "in": "header",
        "name": "X-API-Key"
      }
    }
  }
}

참조