OpenAPI 3.0의 OAuth2 암시적 흐름

OAuth2 암시적 흐름은 인가 응답으로 액세스 토큰을 직접 전달해 유출 위험을 높입니다.

설명

OpenAPI 3.0의 OAuth2 flows.implicit는 인가 응답에 액세스 토큰을 포함하는 흐름을 정의합니다. 토큰 유출과 주입 위험 때문에 일반적으로 PKCE를 사용하는 인가 코드 흐름으로 대체하는 것이 권장됩니다.

잠재적 영향

리디렉션에서 노출된 토큰은 권한 범위 내의 비인가 접근에 악용될 수 있습니다. 공격자가 주입한 토큰을 클라이언트가 받아들이는 경우 잘못된 계정으로 작업할 수도 있습니다.

해결 방법

실제 클라이언트와 인증 서버를 PKCE가 적용된 인가 코드 흐름으로 전환하고, 명세의 정의를 authorizationCode로 갱신하세요. HTTPS URL을 사용하세요. 이 흐름도 클라이언트가 받은 토큰을 보호해야 합니다.

예시

발췌문은 petstore_auth를 인가 코드 흐름으로 바꾸고 인가 URL을 HTTPS로 수정합니다. URL은 실제 제공자의 주소로 바꾸고 PKCE는 실제 구현에 적용하세요.

변경 전

json
{
  "openapi": "3.0.0",
  "components": {
    "securitySchemes": {
      "petstore_auth": {
        "type": "oauth2",
        "flows": {
          "implicit": {
            "authorizationUrl": "http://example.org/api/oauth/dialog",
            "scopes": {
              "write:pets": "modify pets in your account",
              "read:pets": "read your pets"
            }
          }
        }
      }
    }
  }
}

변경 후

json
{
  "openapi": "3.0.0",
  "components": {
    "securitySchemes": {
      "petstore_auth": {
        "type": "oauth2",
        "flows": {
          "authorizationCode": {
            "authorizationUrl": "https://example.org/api/oauth/dialog",
            "tokenUrl": "https://example.com/api/oauth/token",
            "scopes": {
              "write:pets": "modify pets in your account",
              "read:pets": "read your pets"
            }
          }
        }
      }
    }
  }
}

참조