설명
OpenAPI 3.0에서 type: http, scheme: basic은 사용자 이름과 비밀번호를 사용하는 Basic 인증을 정의합니다. http라는 분류가 HTTPS를 배제하는 것은 아닙니다. 이 인증을 실제로 사용하는 연결에 전송 보호가 필요합니다.
잠재적 영향
HTTPS 없이 사용하면 Base64로 인코딩된 자격 증명이 노출될 수 있습니다. 비밀번호가 유출되고 계속 유효하다면 계정 권한이 악용될 수 있습니다.
해결 방법
HTTPS와 서버 인증서 검증을 적용하고 비밀번호 노출을 방지하세요. 사용자 권한 위임이나 제한된 토큰 수명이 필요하면 OAuth2 인가 코드 흐름과 PKCE 같은 대안을 검토하세요. 전환 시 실제 인증 처리와 security 참조를 함께 변경하세요.
예시
다음 발췌문은 인증 정의만 OAuth2로 변경합니다. 사용할 스코프와 security 요구사항, 실제 클라이언트·서버 설정은 별도로 적용해야 합니다.
변경 전
json
{
"openapi": "3.0.0",
"components": {
"securitySchemes": {
"petstore_auth": {
"type": "http",
"scheme": "basic"
}
}
}
}
변경 후
json
{
"openapi": "3.0.0",
"components": {
"securitySchemes": {
"petstore_auth": {
"type": "oauth2",
"flows": {
"authorizationCode": {
"authorizationUrl": "https://example.com/api/oauth/dialog",
"tokenUrl": "https://example.com/api/oauth/token",
"scopes": {
"read:pets": "read your pets"
}
}
}
}
}
}
}