Dev/Springboot

Swagger 를 사용해서 Type 이 Bearer 인 JWT Token 인증하기

린네의 2024. 1. 29. 20:26

개발환경

IDE :  intelliJ 
FrameWork : springboot 3.2.2
Launguage : java 17
BuildTool : Gradle
Swagger : SpringDoc 

 
 
 

문제 상황

restAPI 생성 후 Swagger 를 이용해서 문서작성 도중 JWT 인증 관련 테스트를 위해서 Bearer 타입으로 인증정보가 넘어 와야했는데  자꾸 Bearer 가 누락된채로 JWT 키값이 넘어 왔다.  개발시 테스트는 Postman 을 사용 했다.  이때까진 전혀 문제가 없었는데.. Swagger 을 쓰니까 인증이 안됐다.

 
이전에, 내가 Swagger 를 사용하기 위해 참고한 링크와 build.gradle 은 다음과 같다
 
1. SpringDoc + Swagger 사용하기

 

[Spring Boot 3] SpringDoc과 Swagger를 이용해 API 문서화 자동화하기

💁‍♀️ 앗! 세상은 위험하니 이 API 문서화 자동화 툴을 챙겨 가렴! 📌 시작하기 전, 내가 API나 REST API에 대해 잘 모른다면? 더보기 ✏️ API는 Application Programming Interface(애플리케이션 프로그램

hogwart-scholars.tistory.com

 
 
 
2. authorization 의 bearer 인증 관련 

 

[swagger3] swagger-ui에서 bearer token이 적용 안되는 문제 해결

서비스를 bearer token 으로 인증하고 있는데, swagger ui에 들어가면 Autuorization 이 활성화 되긴 하지만 (Login 후 받은) bearer 토큰을 넣어도 활성화가 안되고 token이 NULL로 서버에 들어간다. <span style

velog.io

 
 
3. build.gradle

#plugins
id "org.springdoc.openapi-gradle-plugin" version "1.8.0"


#dependencies
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.0.2'

 

 

 

해결 방법

 
인증 UI 를 생성시 아래와 같은 설정으로 Apikey 를  등록할 수 있게 바꿨더니 정상적으로 인증이 됐다. 
처음에 scheme,  bearerForamt 을 제대로 안넣어줘서 문제가 발생했었다.  

@Bean
public OpenAPI api() {
   SecurityScheme apiKey = new SecurityScheme()
         .type(SecurityScheme.Type.HTTP)
         .in(SecurityScheme.In.HEADER)
         .name("Authorization")
         .scheme("bearer")
         .bearerFormat("JWT");

   SecurityRequirement securityRequirement = new SecurityRequirement()
         .addList("Bearer Token");

   return new OpenAPI()
         .components(new Components().addSecuritySchemes("Bearer Token", apiKey))
         .addSecurityItem(securityRequirement);
}