ํ๋ก์ ํธ์์ API ์์ฒญ์ ๋ํ ๊ถํ์ ๋ถ์ฌํ ๋, ์ ์ ๋ง๋ค Bearer token์ ๋ถ์ฌํ๋ ๋ฐฉ์์ผ๋ก ์ธ์ฆ์ ์งํํ์๋ค. (์ ์ ๊ฐ ๋ก๊ทธ์ธ์ ์ฑ๊ณตํ๋ฉด token์ ๋ถ์ฌํ๋ ๋ฐฉ์) ์ด๋ฅผ Swagger์ ์ ์ฉ์ํจ ๊ณผ์ ์ ๊ธฐ๋กํ๊ณ ์ ํ๋ค
ํน์ ํ ํ์์ ํ ํฐ์ ์ ์ํ๋ ํ์ค
Json web token : Json ํฌ๋งท์ ์ด์ฉํ์ฌ ์ฌ์ฉ์์ ๋ํ ์์ฑ์ ์ ์ฅํ๋ Web Token
Header, Payload, Signature์ 3 ๋ถ๋ถ์ผ๋ก ๊ตฌ์ฑ๋๋ฉฐ ๊ฐ ๋ถ๋ถ์ Base64๋ก ์ธ์ฝ๋ฉ๋์ด ํํ๋๋ค ๊ฐ ๋ถ๋ถ์ .
์ ๊ตฌ๋ถ์๋ก ์ฌ์ฉ
์ฌ์ฉ ๋ฐฉ๋ฒ
์ธ์ฆ header์ Authorization: Bearer <token>
์ถ๊ฐํ์ฌ ์์ฒญ
ex) Postman์ ์ฌ์ฉํ API ์์ฒญ ์ ์ถ๊ฐ๋ header ์์
public String resolveToken(HttpServletRequest request) {
ContentCachingRequestWrapper wrappedRequest = new ContentCachingRequestWrapper(
request
);
String token = wrappedRequest.getHeader("Authorization");
if (token != null && token.startsWith("Bearer ")) {
token = token.substring(7);
}
return token;
}
@Autowired
private JwtUtil jwtUtil;
@Override
public void doFilter(
ServletRequest servletRequest,
ServletResponse servletResponse,
FilterChain filterChain
) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
String token = jwtUtil.resolveToken(request);
request.setAttribute("token", token);
if (token != null && jwtUtil.validateToken(token)) {
Authentication auth = jwtUtil.getAuthentication(token);
SecurityContextHolder.getContext().setAuthentication(auth);
}
filterChain.doFilter(request, servletResponse);
}
@Bean
public OpenAPI api() {
SecurityScheme apiKey = new SecurityScheme()
.type(SecurityScheme.Type.APIKEY)
.in(SecurityScheme.In.HEADER)
.name("Authorization");
SecurityRequirement securityRequirement = new SecurityRequirement()
.addList("Bearer Token");
return new OpenAPI()
.components(new Components().addSecuritySchemes("Bearer Token", apiKey))
.addSecurityItem(securityRequirement);
}
Bearer + ' ' + <token>
)์
๋ ฅ ์ด์ Swagger๊น์ง ์์ฑ๋์์ผ๋, front ๋ด๋น ์น๊ตฌ๊ฐ ์์ฒญํ ์๊ตฌ์ฌํญ๋ค(ํน์ Product ๊ฐ์ ธ์ค๋ API ์์ฑ, ์ ํ ๋ฑ๋ก ์ img Multipart๋ก ๋ฑ๋ก๋๋๋ก ์์ ) ์์ฒญ์ ํด๊ฒฐํ๊ณ , ๋ฉ์ธ ๋ก์ง์ ๋ง๋ค ์๊ฐ์ด๋ค !!! ๐ฃ
Bearer ์ธ์ฆ ๋ฐฉ์์ ๋ํด ์ฐธ์กฐํ ๊ธ์ ์ด๊ณณ๊ณผ ์ด๊ณณ์ด๋ค
์๋ ํ์ธ์.
SecurityScheme.Type.HTTP๋์ SecurityScheme.Type.APIKEY์ ์ฌ์ฉํด๋ Swagger UI์์์ API ์คํ์ Header์ Token์ด ์ ๋ฌ๋์ จ์๊น์?
์ ๋ ์ ์์ ์ผ๋ก Header์ ํ ํฐ์ด ์ ๋ฌ๋์ง ์์ ์๋์ ๊ฐ์ด ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ์์ต๋๋ค.
๋ค๋ฅธ ๋ฐฉ๋ฒ์ด ์๋ค๋ฉด ์๋ ค์ฃผ์๋ฉด ๊ฐ์ฌํฉ๋๋ค.