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

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

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

https://youtu.be/BVdQ3iuovg0?si=Pwj-tPf0dIx-eGqg

Course of learning you need to know about using Spring Security and JSON Web Tokens(JWT) to secure your applications

 


 

전체 구성도

 


 

HTTP Requests

 

 

모든 일의 시작은 customer나 client가 우리의 backend-system에
HTTP request를 보내는 것부터 입니다.



 

Apache Tomcat 내장 서버에서 실행되는 Spring boot 컨테이너

 

 

JwtAuthFilter

 

스프링 어플리캐이션 내에서 가장 먼저 실행되는 것은 필터이므로 필터를 만들때마다
필터가 어플리케이션내에서 가장 먼저 실행된다는 사실을 알아 차리고 기억해야 합니다.

 

이 경우 가장 먼저 실행되는 것은 JWT 인증 필터이며, 이 필터는 요청 필터당 한 번만 실행되며 토큰 또는 JWT 토큰에 대한 모든 것을 검증하고 확인하는 역할을 합니다

 

 


 

자, 이제 프로세스를 시작해봅시다.

가장 먼저 발생할 일은 여기 내부 점검을 통해 JWT 토큰이 있는지 확인하는 것입니다.


HTTP 403


여기서 볼 수 있듯이 토큰이 누락된 경우 클라이언트에게 403 응답을 보낼 예정입니다. 
그 이유는 JWT가 누락되었기 때문입니다.

 


 

이제 JWT 토큰이 있고 그 후 프로세스 또는 검증 프로세스를 시작합니다.

그러면 내부 실행과 같은 필터가 먼저 UserDetailsService를 사용하여 

데이터베이스에서 사용자 정보를 가져오려고 할 것 입니다.


JwtAuthFilter

 

그리고 이것은 우리가 JWT 인증 필터 내에 extract할 claim 또는 token subject로
설정 할 사용자 이메일을 기반으로 할 것입니다.

다시 한 번 말하자면,
이 JWT 인증 필드는 JWT 토큰 추출 시
사용자 이름이나 이메일을 확인하거나
JWT 토큰에 대해 이야기할 때 이를 subject라고 부르며,
해당 이메일을 사용하여 데이터베이스에서 사용자 세부정보를 가져옵니다.

이것이 첫 번째 call입니다.
사용자를 불러오면 우리는 데이터베이스에서 응답을 받게 됩니다.
그 응답은 어떤 방식으로든 기존 사용자 또는
기존 사용자가 아닌 사용자가 될 수 있습니다.

따라서 여기에서 JWT 인증 필터에 대한 응답을 받으면
몇 가지 확인을 통해 사용자가 존재하지 않는 경우 403을 보낼 것 입니다.

모든 것이 정상인지 여부를 확인하고
데이터베이스에서 사용자를 확보한 후
검증 절차를 시작할 것 입니다.

왜냐하면 이 JWT 토큰은 특정 사용자를 위해 생성되었으므로
사용자를 기반으로 이 토큰을 검증하고자 합니다.

 


 

Validation JWT

 

여기 JWT 서비스를 호출하려고 시도하는 검증된 JWT 프로세스 
또는 메커니즘이 있습니다.



JwtService

이 JWT 서비스는 사용자 자체뿐만 아니라 토큰, 문자열 또는
JWT 토큰을 원하는 대로 호출할 수 있습니다.

이 검증 프로세스가 실행된 후
여기에는 두 가지 경우 시나리오가 있습니다.

첫 번째는,
토큰이 유효하지 않습니다.

예를 들어, 토큰이 만료되었거나
해당 토큰이 해당 사용자를 위한 것이 아니기 때문에
고객에게 403 response를 다시 보낼 예정입니다.



Security

 

그렇지 않으면 어떻게 될까요?
보안 컨텍스트 홀더를 업데이트하고 연결된 사용자를 설정합니다.

데이터베이스에서 사용자 세부 정보를 가져올 때
이 보안 컨텍스트 홀더를 설정할 수 있기 때문입니다.

그래서 우리는 spring이나 나머지 필터 체인 세트에서
이 사용자가 이제 인증되었다고 말할 것입니다.

우리는 인증관리자를 업데이트할 것입니다.


그래서 이 요청에 대해 이 사용자가 인증되었는지 확인할 때마다
보안 컨텍스트 홀더가 업데이트되면 자동으로 요청을 발송하고
디스패처 서블릿으로 전송되며,
디스패처 서블릿에서 컨트롤러로 직접 전송될 것입니다.