설명
전역 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"
}
}
}
}