個別の操作に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"
      }
    }
  }
}

参考資料