개별 작업에 OAuth2 비밀번호 흐름 사용

작업별 인증에서 OAuth2 비밀번호 흐름을 사용하면 클라이언트가 사용자 비밀번호를 직접 전달합니다.

설명

OpenAPI 2.0의 개별 작업이 OAuth2 password 흐름을 사용하는 방식으로 보호되면 클라이언트가 사용자 비밀번호를 직접 받아 토큰을 요청합니다. RFC 9700은 이 흐름의 사용을 금지합니다.

잠재적 영향

사용자 비밀번호를 다루는 구성요소가 늘어나 유출 위험이 커지고, MFA 등 여러 단계의 사용자 확인을 적용하기 어렵습니다.

해결 방법

사용자가 참여하는 인증은 PKCE를 사용하는 accessCode 흐름으로 전환하세요. 작업의 security가 참조하는 정의와 필요한 범위를 일치시키고, 클라이언트와 인증 서버도 함께 변경하세요.

예시

읽기 작업의 petstore_auth 참조를 유지하고 인가 코드 흐름과 read:api 범위를 사용하도록 정리합니다. URL은 실제 제공자의 주소로 바꾸고 PKCE는 실제 구현에서 적용하세요.

변경 전

json
{
  "swagger": "2.0",
  "paths": {
    "/": {
      "get": {
        "security": [
          {
            "petstore_auth": [
              "read:api"
            ]
          }
        ]
      }
    }
  },
  "securityDefinitions": {
    "petstore_auth": {
      "type": "oauth2",
      "flow": "password",
      "tokenUrl": "https://api.my.company.com/oauth/token",
      "scopes": {
        "read:api": "read your apis"
      }
    }
  }
}

변경 후

json
{
  "swagger": "2.0",
  "paths": {
    "/": {
      "get": {
        "security": [
          {
            "petstore_auth": [
              "read:api"
            ]
          }
        ]
      }
    }
  },
  "securityDefinitions": {
    "petstore_auth": {
      "type": "oauth2",
      "flow": "accessCode",
      "authorizationUrl": "https://api.my.company.com/oauth/authorize",
      "tokenUrl": "https://api.my.company.com/oauth/token",
      "scopes": {
        "write:api": "modify apis in your account",
        "read:api": "read your apis"
      }
    }
  }
}

참조