Swagger 를 사용해서 Type 이 Bearer 인 JWT Token 인증하기
개발환경
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);
}