TIL(Today I Learned)

TIL - Swagger에서 Bearer Token 설정

Happy._. 2024. 5. 22. 22:01

Todo 프로젝트에 JWT 인증을 구현하기 전까지는 다음과 같이 간단한 코드만으로 http://localhost:8080/swagger-ui/index.html에서 API 테스트를 할 수 있었다.

@Configuration
class SwaggerConfig {

    @Bean
    fun openApi() = OpenAPI().components(Components())
        .info(Info().title("Todo API").description("Todo API schema").version("1.0.0"))
}

 

JWT 인증 구현 후에는 위 코드만으로는 Swagger에서 테스트를 할 때 인증 헤더를 입력할 수 없어서 PostMan을 사용하다가 Swagger에도 인증 헤더를 입력하는 방법이 있지 않을까 해서 구글링을 하고 방법을 찾았다.

 

SwaggerConfig를 다음과 같이 코드를 추가해주면 된다.

@Configuration
class SwaggerConfig {

    @Bean
    fun openApi(): OpenAPI? {
        val apiKey = SecurityScheme()
            .type(SecurityScheme.Type.APIKEY)
            .`in`(SecurityScheme.In.HEADER)
            .name("Authorization")

        val securityRequirement = SecurityRequirement().addList("Bearer Token")
        return OpenAPI().components(Components().addSecuritySchemes("Bearer Token", apiKey))
            .addSecurityItem(securityRequirement)
            .info(Info().title("Todo API").description("Todo API schema").version("1.0.0"))
    }
}

 

위와 같이 설정 후 http://localhost:8080/swagger-ui/index.html에 접속하면 다음과 같이 [Authorize] 버튼이 생긴다.

 

버튼을 누르면 다음과 같이 입력 창이 뜨는데 token 값만 입력해서는 인증이 제대로 되지 않고 Bearer를 같이 넣어주어야 한다.

 

[Authorize] 버튼을 누르면 다음과 같이 나오는데 [Close]를 누르고 API 테스트를 진행하면 된다.

[Logout] 버튼을 누르면 다시 입력창으로 바뀐다.

 

API 테스트를 할 때 Curl을 보면 -H 'Authorization: Bearer ...가 추가된 것을 볼 수 있다.

 

 

참고자료 : https://velog.io/@zinna_1109/Toy-Project-Swagger-Bearer-Token%EC%84%A4%EC%A0%95