Spring boot - Swagger Bearer Authentication configuration in open api yml is not working

85 Views Asked by At

As per the Open API 3.0.0 documentation bearer config does not work. https://swagger.io/docs/specification/authentication/bearer-authentication/

we use spring boot 2.7.2 and springdoc-openapi-ui 1.6.8. And for option 1 and option 2 we didn't change any other configurations or dependencies.

Option 1 : Open API yml config - does not work (i.e. No "Authorize" button in Swagger web page)

openapi: 3.0.0
info:
  version: 1.0.0
  title: Swagger API
security:
  - bearerAuth: []
paths:
  /api/swagger/users:
   get:      
      summary: To get all users from the Swagger service
      tags:
        - Swagger
      description: >-
        getUsers REST API endpoint will fetch all the users from the Swagger Service. 
      operationId: getUsers
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/UserDTO'      
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
  schemas:
    UserDTO:
      properties:
        customUserId:
          type: integer
          format: int64
          example: 10
        userLoginId:
          type: string
          example: [email protected]
        isActive:
          type: boolean
          example: true
        firstName:
          type: string
          example: abc
        lastName:
          type: string
          example: xyz       

Option 2 : Overriding OpenApiCustomiser - does work

import org.springdoc.core.customizers.OpenApiCustomiser;
import org.springframework.stereotype.Component;

import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.security.SecurityRequirement;
import io.swagger.v3.oas.models.security.SecurityScheme;

@Component
public class AuthOpenApiCustomizer implements OpenApiCustomiser {
    @Override
    public void customise(OpenAPI openApi) {
        var securitySchemeName = "bearerAuth";
        openApi.getComponents().addSecuritySchemes(securitySchemeName, new SecurityScheme().type(SecurityScheme.Type.HTTP).scheme("bearer").bearerFormat("JWT"));
        openApi.addSecurityItem(new SecurityRequirement().addList(securitySchemeName));
    }
}

what configuration is missing in openapi.yml file or application.yml file because simply adding AuthOpenApiCustomizer class does show the "Authorize" button and working as expected?

0

There are 0 best solutions below