카테고리 없음
SpringBoot3.x Swagger3.x에서 JWT인증 설정
KyeongRok Kim
2023. 11. 1. 09:08
SpringBoot가 3.x대로 올라오면서 애로사항이 제법 있습니다. 기존에 쓰던 코드에 한계점이 있어서 확장 하거나 기능을 추가하면서 구조가 변경 됩니다. 그러면 기존에 있던 문서들은 소용이 없어집니다.
SpringBoot 3.x가 그렇습니다. Swagger도 oAuth2에서 oAuth3로 바뀌면서 적용하는 방법들이 많이 바뀌었습니다. 하지만 문서가 잘 검색이 안됩니다. 수가 많지 않아서일 것입니다.
다음 내용은 SpringBoot3.x Swagger3.x에서 JWT인증 하면서 겪은 애로사항이 있어서 몇자 기록을 남겨봅니다.
Swagger 3.x설정 하는 코드입니다. 여기에서 중요한 것은 @SecurityScheme입니다.
@OpenAPIDefinition(
info = @Info(title = "Book App",
description = "Book App Api명세",
version = "v1"))
@SecurityScheme(
name = "Bearer Authentication",
type = SecuritySchemeType.HTTP,
bearerFormat = "JWT",
scheme = "bearer"
)
@RequiredArgsConstructor
@Configuration
public class SwaggerConfig {
@Bean
public GroupedOpenApi chatOpenApi() {
String[] paths = {"/api/v1/**"};
return GroupedOpenApi.builder()
.group("Book API v1")
.pathsToMatch(paths)
.build();
}
}
위 @SecurityScheme 만 붙이면 Authorize버튼이 활성화 됩니다.
설정이 잘 되었다면 request header에 authorization: Bearer <jwt> 형태로 토큰이 들어옵니다.
이렇게만 하면 Authorize버튼이 생겨서 되는 것 같지만 Request Header를 확인 해보면 위와 같이 이쁘게 Authorization: Bearer <token>이 안들어 옵니다.
SecurityRequirement
@SecurityRequirement 어노테이션을 Controller에 붙여야 swagger에서 토큰을 넣었을 때 Header를 통해 token이 들어옵니다. 한 ... 6시간 정도 삽질했네요 ㅜ
@RestController
@SecurityRequirement(name = "Bearer Authentication")
@RequiredArgsConstructor
@RequestMapping("/api/v1/users")
@Tag(name = "ABC User Controller", description = "사용자(User) 관리")
public class UserController {
// ...
}
참고
728x90