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"
            }
          }
        }
      }
    }
  }
}

参考資料