OpenAPI 3.0でOAuth2パスワードフローを定義

OAuth2パスワードフローでは、ユーザーのパスワードがクライアントに渡ります。

説明

OpenAPI 3.0のOAuth2のflows.passwordは、クライアントがユーザーのパスワードを受け取ってトークンを要求するフローを定義します。ユーザーの認証情報がクライアントに渡るため、RFC 9700はこのフローの使用を禁止しています。

想定される影響

クライアントが侵害されると、アクセストークンだけでなく元のパスワードも漏えいするおそれがあります。複数段階の確認やフィッシングに強い認証にも適していません。

対処方法

ユーザーが操作する認可には、PKCEを適用したauthorizationCodeを使用してください。HTTPSの認可・トークンURLを指定し、実際のクライアントと認可サーバーを変更してから、パスワードフローを無効にしてください。

例

次の抜粋ではpetstore_authのフロー定義を変更します。URLは実際のプロバイダーのものに置き換えてください。PKCEの適用と、この方式を要求するsecurityの設定も実際の構成で確認してください。

変更前

json
{
  "openapi": "3.0.0",
  "components": {
    "securitySchemes": {
      "petstore_auth": {
        "type": "oauth2",
        "flows": {
          "password": {
            "tokenUrl": "https://example.com/api/oauth/token",
            "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"
            }
          }
        }
      }
    }
  }
}

参考資料