작업별 security의 빈 객체

작업별 security의 빈 요구사항과 잘못된 객체 형식을 구분하고 의도한 인증 정책을 지정하세요.

설명

개별 작업의 security 배열에 빈 요구사항 객체 {}가 있으면 인증 없는 접근도 허용됩니다. 반면 security: {}처럼 필드 자체를 객체로 지정하는 것은 배열을 요구하는 OpenAPI 형식에 맞지 않습니다. 작업별 설정은 전역 인증 요구사항을 재정의합니다.

잠재적 영향

빈 요구사항을 잘못 넣으면 보호할 작업을 익명 접근이 가능한 것으로 문서화하게 됩니다. 배열 대신 객체를 쓰면 명세 검증이나 관련 도구의 처리가 실패할 수 있습니다.

해결 방법

security를 배열로 작성하고 인증이 필수인 작업에서는 빈 요구사항 객체를 제거하세요. 정의된 인증 방식과 필요한 범위를 지정하거나, 작업의 security를 생략해 전역 정책을 상속하세요.

예시

변경 전의 security: {}는 잘못된 형식입니다. 변경 후에는 OAuth2의 read 범위를 담은 올바른 배열을 사용합니다. 예시 OAuth2 URL은 실제 제공자의 주소로 바꾸세요.

변경 전

json
{
  "openapi": "3.0.0",
  "paths": {
    "/": {
      "get": {
        "security": {},
        "responses": {
          "200": {
            "description": "ok"
          }
        }
      }
    }
  },
  "security": [
    {
      "OAuth2": [
        "read"
      ]
    }
  ],
  "info": {
    "title": "Simple API overview",
    "version": "1.0.0"
  },
  "components": {
    "securitySchemes": {
      "OAuth2": {
        "type": "oauth2",
        "flows": {
          "authorizationCode": {
            "authorizationUrl": "https://example.com/oauth/authorize",
            "tokenUrl": "https://example.com/oauth/token",
            "scopes": {
              "read": "Read API versions"
            }
          }
        }
      }
    }
  }
}

변경 후

json
{
  "openapi": "3.0.0",
  "paths": {
    "/": {
      "get": {
        "security": [
          {
            "OAuth2": [
              "read"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "ok"
          }
        }
      }
    }
  },
  "security": [
    {
      "OAuth2": [
        "read"
      ]
    }
  ],
  "info": {
    "title": "Simple API overview",
    "version": "1.0.0"
  },
  "components": {
    "securitySchemes": {
      "OAuth2": {
        "type": "oauth2",
        "flows": {
          "authorizationCode": {
            "authorizationUrl": "https://example.com/oauth/authorize",
            "tokenUrl": "https://example.com/oauth/token",
            "scopes": {
              "read": "Read API versions"
            }
          }
        }
      }
    }
  }
}

참조