본문 바로가기
코드잇 스프린트 : 프론트엔드 단기심화 5기 (백엔드 협업)

[Youtube] Spring boot 3.0 - Secure your API with JWT Token 해석 및 프로젝트 적용 기록(3)

by 아임제니퍼 2025. 1. 30.

JwtAuthFilter

이 JWT  인증 필터 내에서 가장 먼저 하는 일은 JWT 토큰이 있는지 확인하는 것입니다.

우선 첫 번째로, authHeader String을 만들 것입니다.
왜냐하면 우리가 콜을 만들 때, 헤더 내에 JWT 인증 토큰을 전달해야 하기 때문에,
이 토큰은 Authorization이라는 헤더 내에 있어야 합니다.
여기서 우리가 해야 할 일은 이 헤더를 추출하는 것입니다.

따라서 이 인증 헤더는 우리 요청의 일부이며,
request를 통해 getHeader라는 메서드를 호출할 수 있으며
헤더 내에서 헤더 이름을 전달하기만 하면 됩니다.

Bearer 토큰은 항상 Bearer 키워드로 시작합니다.


HttpServletRequest란?
Java 웹 애플리케이션을 개발할 때, HTTP 요청을 처리해야 하는 경우가 많다.
HttpServletRequest 인터페이스는 이러한 HTTP 요청을 처리하기 위한 핵심 클래스 중 하나다.

 

request.getHeader(String name)
이 메서드는 지정된 이름의 HTTP 헤더 값을 반환한다.
헤더는 클라이언트와 서버 간의 추가 정보를 전달하는 데 사용된다.

 

여기서 Bearer 토큰 이란?

Bearer 토큰은 OAuth 프레임워크에서 액세스 토큰으로 사용되는 토큰의 유형이다. Bearer 토큰은 불투명한(Opaque) 문자열일 수도 있고, JSON Web Token(JWT)일 수도 있다. 토큰의 형태는 인증 서버에서 정의한다. 중요한 점은 Bearer 토큰이 클라이언트에 의해 해석되어도, 사용자의 정보를 안전하게 전달할 수 있어야 한다는 것이다. Bearer 토큰에는 서버가 클라이언트의 권한을 메타데이터가 포함되어 있어야 한다. 또한,  Bearer 토큰은 안정성을 보장하기 위해 충분히 복잡한 알고리즘을 사용하여 발급되어야 한다.

Authorization: Bearer {ACCESS_TOKEN}

 

    final String authHeader = request.getHeader("Authorization");
    if (authHeader == null || !authHeader.startsWith("Bearer ")) {
        filterChain.doFilter(request, response);
        return;
    }

 

 

따라서 이 두 조건이 없으면 필터체인에 call 하기만 하면 되고
다음 필터에 대한 요청과 응답을 전달해야 합니다.

이제 이 인증 헤더에서 토큰을 추출해보도록 하겠습니다.

JWT 토큰을 확인한 후에 해야 할 일은 
이 사용자 세부 정보 서비스에  call하여
데이터 베이스 내에 이미 사용자가 있는지 확인하는 것입니다.

하지만 그렇게 하려면 JWT service를 call하여 
사용자 이름을 추출해야 합니다.

exctract username

 

 

이 JWT 토큰을 조작할 수 있는 class가 필요합니다.

<참고>

[Java] HttpServletRequest 내장 함수
https://hmw0908.tistory.com/95

Bearer 인증
https://docs.tosspayments.com/resources/glossary/bearer-auth