OpenAPI 3の全体のセキュリティ要件で参照される未定義のOAuth2スコープ

OpenAPI 3.0の全体のセキュリティ要件とOAuth2スコープの定義が一致していません。

説明

OpenAPI 3.0の全体のsecurityで要求するOAuth2スコープは、対応するcomponents.securitySchemesのflowsに定義されている必要があります。未定義の名前を参照すると、必要な権限が不明確になります。

想定される影響

APIの利用者が誤ったスコープを要求したり、文書の検証やクライアント生成に失敗したりする可能性があります。

対処方法

全体の要件を、該当するOAuth2フローのscopesと認可サーバーの設定に合わせます。誤った参照を修正し、必要な権限は不足している定義を追加して維持してください。OpenID Connectではプロバイダーのスコープを使用するため、ローカルのOAuth2フローの定義とは区別します。

例

この例では、不要なerror:apiの参照を削除しています。必要な権限を表す場合は、削除せずにスコープの定義を追加してください。

変更前

json
{
  "openapi": "3.0.0",
  "security": [
    {
      "oAuth2AuthCode": [
        "read:api",
        "error:api"
      ]
    }
  ],
  "components": {
    "securitySchemes": {
      "oAuth2AuthCode": {
        "type": "oauth2",
        "flows": {
          "authorizationCode": {
            "authorizationUrl": "https://api.example.com/oauth/authorize",
            "tokenUrl": "https://api.example.com/oauth/token",
            "scopes": {
              "read:api": "read your apis"
            }
          }
        }
      }
    }
  }
}

変更後

json
{
  "openapi": "3.0.0",
  "security": [
    {
      "oAuth2AuthCode": [
        "read:api"
      ]
    }
  ],
  "components": {
    "securitySchemes": {
      "oAuth2AuthCode": {
        "type": "oauth2",
        "flows": {
          "authorizationCode": {
            "authorizationUrl": "https://api.example.com/oauth/authorize",
            "tokenUrl": "https://api.example.com/oauth/token",
            "scopes": {
              "read:api": "read your apis"
            }
          }
        }
      }
    }
  }
}

参考資料