Search code examples
swaggerauthorizationswagger-ui

How to send custom headers with requests in Swagger UI?


I have some endpoints in the API - /user/login, /products.

In Swagger UI I post email and password to /user/login and as a response I receive a token string.

Then, I can copy the token from the response and want to use it as Authorization header value in requests to all urls if it's present, and to /products as an example.

Should I create a text input manually somewhere on the Swagger UI page, then put the token there and somehow inject in the requests or are there tools to manage it in a better way?


Solution

  • You can add a header parameter to your request, and Swagger-UI will show it as an editable text box:

    swagger: "2.0"
    info:
      version: 1.0.0
      title: TaxBlaster
    host: taxblaster.com
    basePath: /api
    schemes:
    - http
    
    paths:
    
      /taxFilings/{id}:
    
        get:
          parameters:
          - name: id
            in: path
            description: ID of the requested TaxFiling
            required: true
            type: string
          - name: auth
            in: header
            description: an authorization header
            required: true
            type: string
          responses:
            200:
              description: Successful response, with a representation of the Tax Filing.
              schema:
                $ref: "#/definitions/TaxFilingObject"
            404:
              description: The requested tax filing was not found.
    
    definitions:
      TaxFilingObject:
        type: object
        description: An individual Tax Filing record.
        properties:
          filingID:
            type: string
          year:
            type: string
          period:
            type: integer
          currency:
            type: string
          taxpayer:
            type: object
    

    Swagger-UI with auth param text box

    You can also add a security definition with type apiKey:

    swagger: "2.0"
    info:
      version: 1.0.0
      title: TaxBlaster
    host: taxblaster.com
    basePath: /api
    schemes:
    - http
    
    securityDefinitions:
      api_key:
        type: apiKey
        name: api_key
        in: header
        description: Requests should pass an api_key header.
    
    security: 
     - api_key: []
    
    paths:
    
      /taxFilings/{id}:
    
        get:
          parameters:
          - name: id
            in: path
            description: ID of the requested TaxFiling
            required: true
            type: string
    
          responses:
            200:
              description: Successful response, with a representation of the Tax Filing.
              schema:
                $ref: "#/definitions/TaxFilingObject"
            404:
              description: The requested tax filing was not found.
    
    definitions:
      TaxFilingObject:
        type: object
        description: An individual Tax Filing record.
        properties:
          filingID:
            type: string
          year:
            type: string
          period:
            type: integer
          currency:
            type: string
          taxpayer:
            type: object
    

    The securityDefinitions object defines security schemes.

    The security object (called "security requirements" in Swagger–OpenAPI), applies a security scheme to a given context. In our case, we're applying it to the entire API by declaring the security requirement a top level. We can optionally override it within individual path items and/or methods.

    This would be the preferred way to specify your security scheme; and it replaces the header parameter from the first example. Unfortunately, Swagger-UI doesn't offer a text box to control this parameter, at least in my testing so far.