全体の認証にOAuth2パスワードフローを使用

OAuth2パスワードフローでは、クライアントがユーザーのパスワードを直接扱います。

説明

OpenAPI 2.0の全体のsecurityがpasswordフローを参照すると、APIの既定の認証方式として、クライアントがユーザーのパスワードを受け取って送信する構成になります。OAuthのセキュリティ指針であるRFC 9700は、このフローの使用を禁止しています。

想定される影響

クライアントの侵害や認証情報の不適切な処理によって、ユーザーのパスワードが漏えいするおそれがあります。複数段階のユーザー操作を必要とするMFAなどの認証にも適していません。

対処方法

ユーザーが操作する認可には、PKCEを使う認可コードフローへ移行してください。OpenAPI 2.0ではflow: accessCodeとHTTPSの認可・トークンURLを指定します。実際のクライアントと認可サーバーを合わせて変更してから、パスワードフローを無効にしてください。

例

次の例では全体のoauth2要件を保ったままフローを変更します。URLを実際のプロバイダーのものに置き換え、PKCEはクライアントと認可サーバーで別途設定してください。

変更前

json
{
  "securityDefinitions": {
    "oauth2": {
      "type": "oauth2",
      "flow": "password",
      "tokenUrl": "https://api.example.com/oauth/token",
      "scopes": {}
    }
  },
  "security": [
    {
      "oauth2": []
    }
  ]
}

変更後

json
{
  "securityDefinitions": {
    "oauth2": {
      "type": "oauth2",
      "flow": "accessCode",
      "authorizationUrl": "https://api.example.com/oauth/authorize",
      "tokenUrl": "https://api.example.com/oauth/token",
      "scopes": {}
    }
  },
  "security": [
    {
      "oauth2": []
    }
  ]
}

参考資料