개별 작업에 OAuth2 암시적 흐름 사용

작업이 OAuth2 암시적 흐름을 요구하면 클라이언트는 인가 응답에서 액세스 토큰을 직접 받습니다.

설명

OpenAPI 2.0의 작업별 security가 implicit 흐름을 참조하면 클라이언트는 인가 응답에서 액세스 토큰을 직접 받습니다. 이 방식은 토큰 유출과 주입 위험 때문에 권장되지 않습니다.

잠재적 영향

토큰이 리디렉션 과정에서 유출되면 해당 권한을 악용할 수 있습니다. 공격자가 제공한 토큰을 받아들이는 클라이언트에서는 의도하지 않은 계정으로 작업할 위험도 있습니다.

해결 방법

PKCE를 사용하는 인가 코드 흐름으로 전환하고 securityDefinitions의 흐름을 accessCode로 변경하세요. 작업에서 필요한 범위와 정의된 범위를 일치시키세요. 실제 클라이언트와 인증 서버를 변경해야 전환이 완료됩니다.

예시

예시는 petstore_auth 참조를 유지하고 인가 코드 흐름으로 바꿉니다. GET 작업에는 정의된 read:api 범위만 요구합니다. URL은 실제 제공자의 주소로 바꾸고 PKCE는 실제 구현에 적용하세요.

변경 전

json
{
  "swagger": "2.0",
  "paths": {
    "/": {
      "get": {
        "security": [
          {
            "petstore_auth": []
          }
        ]
      }
    }
  },
  "securityDefinitions": {
    "petstore_auth": {
      "type": "oauth2",
      "flow": "implicit",
      "authorizationUrl": "https://api.my.company.com/oauth/authorize",
      "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"
      }
    }
  }
}

참조