セキュリティ定義でのOAuth2パスワードフローの使用

OAuth2のパスワードフローは利用者のパスワードをクライアントに渡すため、使用してはいけません。

説明

OpenAPI 2.0のsecurityDefinitionsにOAuth2のpasswordフローを定義すると、利用者のパスワードをクライアントに渡す方式を記述することになります。現在のOAuthセキュリティベストプラクティスでは、このフローの使用が禁止されています。

想定される影響

利用者のパスワードを扱うクライアントが増え、漏えいの危険が高まります。複数の手順を必要とするMFAやブラウザー経由のログインにも対応しにくくなります。

対処方法

利用者の権限を委譲する場合は、accessCodeとPKCEに移行してください。認可サーバーとクライアントを合わせて変更し、authorizationUrl、tokenUrl、scopesを実際の設定と一致させます。

例

この例は認証方式の定義の変更を示しています。文書の認証要件として適用するには、全体または操作のsecurityからその方式を参照する必要があります。

変更前

json
{
  "swagger": "2.0",
  "securityDefinitions": {
    "petstore_auth": {
      "type": "oauth2",
      "flow": "password",
      "tokenUrl": "https://api.my.company.com/oauth/token"
    }
  }
}

変更後

json
{
  "swagger": "2.0",
  "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"
      }
    }
  }
}

参考資料