{
  "openapi": "3.0.3",
  "info": {
    "version": "1.0.0",
    "title": "Support for different security types",
    "description": "https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#securitySchemeObject"
  },
  "servers": [
    {
      "url": "https://httpbin.org"
    }
  ],
  "tags": [
    {
      "name": "API Key"
    },
    {
      "name": "HTTP"
    },
    {
      "name": "OAuth 2"
    },
    {
      "name": "OpenID Connect"
    },
    {
      "name": "Other"
    }
  ],
  "paths": {
    "/anything/apiKey": {
      "get": {
        "summary": "Query parameter",
        "description": "`apiKey` auth will be supplied within an `apiKey` query parameter.",
        "tags": ["API Key"],
        "responses": {
          "200": {
            "description": "OK"
          }
        },
        "security": [
          {
            "apiKey_query": []
          }
        ]
      },
      "post": {
        "summary": "Cookie",
        "description": "`apiKey` auth will be supplied within an `api_key` cookie.",
        "tags": ["API Key"],
        "responses": {
          "200": {
            "description": "OK"
          }
        },
        "security": [
          {
            "apiKey_cookie": []
          }
        ]
      },
      "put": {
        "summary": "Header",
        "description": "`apiKey` auth will be supplied within an `X-API-KEY` header.",
        "tags": ["API Key"],
        "responses": {
          "200": {
            "description": "OK"
          }
        },
        "security": [
          {
            "apiKey_header": []
          }
        ]
      }
    },
    "/anything/basic": {
      "post": {
        "summary": "Basic",
        "description": "Authentication credentials will be supplied within a `Basic` `Authorization` header.\n\nhttps://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#basic-authentication-sample",
        "tags": ["HTTP"],
        "responses": {
          "200": {
            "description": "OK"
          }
        },
        "security": [
          {
            "basic": []
          }
        ]
      }
    },
    "/anything/bearer": {
      "post": {
        "summary": "Bearer",
        "description": "Authentication credentials will be supplied within a `Bearer` `Authorization` header.\n\nhttps://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#basic-authentication-sample",
        "tags": ["HTTP"],
        "responses": {
          "200": {
            "description": "OK"
          }
        },
        "security": [
          {
            "bearer": []
          }
        ]
      },
      "put": {
        "summary": "Bearer (`jwt` format)",
        "description": "Authentication credentials will be supplied within a `Bearer` `Authorization` header, but its data should be controlled as a JWT.\n\nhttps://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#basic-authentication-sample\n\n> ℹ️\n> We currently do not support any special handling for this so they're handled as a standard `Bearer` authentication token.",
        "tags": ["HTTP"],
        "responses": {
          "200": {
            "description": "OK"
          }
        },
        "security": [
          {
            "bearer_jwt": []
          }
        ]
      }
    },
    "/anything/oauth2": {
      "post": {
        "summary": "General support (all flow types)",
        "description": "> ℹ️\n> We currently do not handle OAuth 2 authentication flows so if an operation has an `oauth2` requirement we assume that the user, or the projects JWT, has a qualified `bearer` token and will use that.\n\nhttps://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#fixed-fields-23",
        "tags": ["OAuth 2"],
        "responses": {
          "200": {
            "description": "OK"
          }
        },
        "security": [
          {
            "oauth2": ["write:things"]
          }
        ]
      },
      "get": {
        "summary": "General support (authorizationCode flow type)",
        "description": "> ℹ️\n> We currently do not handle OAuth 2 authentication flows so if an operation has an `oauth2` requirement we assume that the user, or the projects JWT, has a qualified `bearer` token and will use that.\n\nhttps://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#fixed-fields-23",
        "tags": ["OAuth 2"],
        "responses": {
          "200": {
            "description": "OK"
          }
        },
        "security": [
          {
            "oauth2_authorizationCode": ["write:things"]
          }
        ]
      },
      "put": {
        "summary": "General support (clientCredentials flow type)",
        "description": "> ℹ️\n> We currently do not handle OAuth 2 authentication flows so if an operation has an `oauth2` requirement we assume that the user, or the projects JWT, has a qualified `bearer` token and will use that.\n\nhttps://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#fixed-fields-23",
        "tags": ["OAuth 2"],
        "responses": {
          "200": {
            "description": "OK"
          }
        },
        "security": [
          {
            "oauth2_clientCredentials": ["write:things"]
          }
        ]
      },
      "patch": {
        "summary": "General support (implicit flow type)",
        "description": "> ℹ️\n> We currently do not handle OAuth 2 authentication flows so if an operation has an `oauth2` requirement we assume that the user, or the projects JWT, has a qualified `bearer` token and will use that.\n\nhttps://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#fixed-fields-23",
        "tags": ["OAuth 2"],
        "responses": {
          "200": {
            "description": "OK"
          }
        },
        "security": [
          {
            "oauth2_implicit": ["write:things"]
          }
        ]
      },
      "delete": {
        "summary": "General support (password flow type)",
        "description": "> ℹ️\n> We currently do not handle OAuth 2 authentication flows so if an operation has an `oauth2` requirement we assume that the user, or the projects JWT, has a qualified `bearer` token and will use that.\n\nhttps://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#fixed-fields-23",
        "tags": ["OAuth 2"],
        "responses": {
          "200": {
            "description": "OK"
          }
        },
        "security": [
          {
            "oauth2_password": ["write:things"]
          }
        ]
      }
    },
    "/anything/openIdConnect": {
      "post": {
        "summary": "General support",
        "description": "🚧 This is not supported.",
        "tags": ["OpenID Connect"],
        "responses": {
          "200": {
            "description": "OK"
          }
        },
        "security": [
          {
            "openIdConnect": []
          }
        ]
      }
    },
    "/anything/no-auth": {
      "post": {
        "summary": "No auth requirements",
        "description": "This operation does not have any authentication requirements.",
        "tags": ["Other"],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/anything/optional-auth": {
      "get": {
        "summary": "Optional auth",
        "description": "The `apiKey` query parameter auth on this operation is optional.\n\nhttps://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#security-requirement-object",
        "tags": ["Other"],
        "responses": {
          "200": {
            "description": "OK"
          }
        },
        "security": [
          {
            "apiKey_query": []
          },
          {}
        ]
      }
    },
    "/status/401": {
      "post": {
        "summary": "Forced invalid authentication",
        "description": "This endpoint requires an authentication header but making any request to it will forcefully return a 401 status code for invalid auth.",
        "tags": ["Other"],
        "responses": {
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "apiKey_header": []
          }
        ]
      }
    }
  },
  "components": {
    "securitySchemes": {
      "apiKey_cookie": {
        "type": "apiKey",
        "in": "cookie",
        "name": "api_key",
        "description": "An API key that will be supplied in a named cookie. https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#security-scheme-object"
      },
      "apiKey_header": {
        "type": "apiKey",
        "in": "header",
        "name": "X-API-KEY",
        "description": "An API key that will be supplied in a named header. https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#security-scheme-object"
      },
      "apiKey_query": {
        "type": "apiKey",
        "in": "query",
        "name": "apiKey",
        "description": "An API key that will be supplied in a named query parameter. https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#security-scheme-object"
      },
      "basic": {
        "type": "http",
        "scheme": "basic",
        "description": "Basic auth that takes a base64'd combination of `user:password`. https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#basic-authentication-sample"
      },
      "bearer": {
        "type": "http",
        "scheme": "bearer",
        "description": "A bearer token that will be supplied within an `Authentication` header as `bearer <token>`. https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#basic-authentication-sample"
      },
      "bearer_jwt": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT",
        "description": "A bearer token that will be supplied within an `Authentication` header as `bearer <token>`. In this case, the format of the token is specified as JWT. https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#jwt-bearer-sample"
      },
      "oauth2": {
        "type": "oauth2",
        "description": "An OAuth 2 security flow. https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#fixed-fields-23",
        "flows": {
          "authorizationCode": {
            "authorizationUrl": "http://example.com/oauth/dialog",
            "tokenUrl": "http://example.com/oauth/token",
            "scopes": {
              "write:things": "Add things to your account"
            }
          },
          "clientCredentials": {
            "tokenUrl": "http://example.com/oauth/token",
            "scopes": {
              "write:things": "Add things to your account"
            }
          },
          "implicit": {
            "authorizationUrl": "http://example.com/oauth/dialog",
            "scopes": {
              "write:things": "Add things to your account"
            }
          },
          "password": {
            "tokenUrl": "http://example.com/oauth/token",
            "scopes": {
              "write:things": "Add things to your account"
            }
          }
        }
      },
      "oauth2_authorizationCode": {
        "type": "oauth2",
        "description": "An OAuth 2 security flow that only supports the `authorizationCode` flow type. https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#oauth-flows-object",
        "flows": {
          "authorizationCode": {
            "authorizationUrl": "http://alt.example.com/oauth/dialog",
            "tokenUrl": "http://alt.example.com/oauth/token",
            "scopes": {
              "write:things": "Add things to your account"
            }
          }
        }
      },
      "oauth2_clientCredentials": {
        "type": "oauth2",
        "description": "An OAuth 2 security flow that only supports the `clientCredentials` flow type. https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#oauth-flows-object",
        "flows": {
          "clientCredentials": {
            "tokenUrl": "http://alt.example.com/oauth/token",
            "scopes": {
              "write:things": "Add things to your account"
            }
          }
        }
      },
      "oauth2_implicit": {
        "type": "oauth2",
        "description": "An OAuth 2 security flow that only supports the `implicit` flow type. https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#oauth-flows-object",
        "flows": {
          "implicit": {
            "authorizationUrl": "http://alt.example.com/oauth/dialog",
            "scopes": {
              "write:things": "Add things to your account"
            }
          }
        }
      },
      "oauth2_password": {
        "type": "oauth2",
        "description": "An OAuth 2 security flow that only supports the `password` flow type. https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#oauth-flows-object",
        "flows": {
          "password": {
            "tokenUrl": "http://alt.example.com/oauth/token",
            "scopes": {
              "write:things": "Add things to your account"
            }
          }
        }
      },
      "openIdConnect": {
        "type": "openIdConnect",
        "openIdConnectUrl": "https://example.com/.well-known/openid-configuration",
        "description": "OpenAPI authentication. https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#fixed-fields-23"
      }
    }
  }
}
