설명
OpenAPI 2.0의 전역 security가 password 흐름을 참조하면 API의 기본 인증 방식이 클라이언트에서 사용자 비밀번호를 직접 받아 전달하는 구조가 됩니다. OAuth 보안 권고인 RFC 9700은 이 흐름을 사용하지 않도록 요구합니다.
잠재적 영향
클라이언트의 침해나 잘못된 자격 증명 처리로 사용자 비밀번호가 유출될 수 있습니다. 여러 단계의 사용자 확인이 필요한 MFA 같은 인증 방식에도 적합하지 않습니다.
해결 방법
사용자가 참여하는 인증은 PKCE를 적용한 인가 코드 흐름으로 전환하세요. OpenAPI 2.0에서는 flow: accessCode와 HTTPS 인가·토큰 URL을 지정합니다. 실제 클라이언트와 인증 서버를 함께 변경한 뒤 비밀번호 흐름을 비활성화하세요.
예시
예시는 전역 oauth2 요구사항을 유지하면서 흐름을 변경합니다. URL은 실제 제공자의 주소로 바꾸고, PKCE는 클라이언트와 인증 서버에 별도로 적용하세요.
변경 전
json
{
"securityDefinitions": {
"oauth2": {
"type": "oauth2",
"flow": "password",
"tokenUrl": "https://api.example.com/oauth/token",
"scopes": {}
}
},
"security": [
{
"oauth2": []
}
]
}
변경 후
json
{
"securityDefinitions": {
"oauth2": {
"type": "oauth2",
"flow": "accessCode",
"authorizationUrl": "https://api.example.com/oauth/authorize",
"tokenUrl": "https://api.example.com/oauth/token",
"scopes": {}
}
},
"security": [
{
"oauth2": []
}
]
}