설명
개별 작업의 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"
}
}
}
}
}
}
}