Jwt (Json web token)

cook_pasta·2024년 9월 4일

SpringBoot

목록 보기
1/5

Jwt (Json web token)

웹 애플리케이션에서 사용자 인증과 정보를 안전하게 전달하기 위해 널리 사용되는 컴팩트하고 독립적인 방법입니다.

JWT의 작동 방식

  1. 사용자 인증: 사용자가 로그인하면 서버는 사용자 정보를 바탕으로 JWT를 생성합니다. 이때 사용된 비밀 키를 통해 서명이 생성됩니다.

  2. 토큰 전송: 생성된 JWT는 클라이언트(예: 웹 브라우저)로 전송됩니다. 이후 클라이언트는 이 토큰을 로컬 스토리지 또는 쿠키에 저장합니다.

  3. 인증된 요청: 클라이언트는 서버에 요청할 때마다 JWT를 포함시켜 보냅니다. 주로 HTTP 요청의 Authorization 헤더에 Bearer 토큰으로 전송합니다.

  4. 서버 검증: 서버는 전달받은 JWT의 서명을 검증하여 토큰이 변조되지 않았는지 확인한 후, 페이로드에 포함된 사용자 정보를 바탕으로 요청을 처리합니다.

JWT의 장점과 단점

장점:

  • 자체 포함(Self-contained): JWT는 모든 정보를 자체적으로 담고 있어, 서버가 별도의 세션을 유지할 필요가 없습니다.
  • 확장성: 여러 서비스 간에 JWT를 사용해 쉽게 인증 정보를 공유할 수 있습니다.
  • 보안: 서명을 통해 변조를 방지할 수 있습니다.

단점:

  • 무효화 어려움: JWT는 서버가 세션을 관리하지 않기 때문에, 발급 후 무효화하는 것이 어렵습니다. (보통 이 문제를 해결하기 위해 토큰 블랙리스트를 사용합니다.)
  • 페이로드 노출: JWT는 인코딩되지만 암호화되지는 않기 때문에, 페이로드에 포함된 정보가 노출될 수 있습니다. 따라서 민감한 정보는 포함시키지 않는 것이 좋습니다.

.
.
.
궁금한 것들 적어두는 중

JwtAuthenticationFilter 클래스

Spring Security에서 사용되는 JWT 인증 필터
클라이언트의 요청에 포함된 JWT를 검증하고, 유효한 토큰일 경우 인증된 사용자 정보를 Spring Security의 SecurityContext에 설정하는 역할을 합니다. 이 과정을 통해 이후의 요청들은 인증된 사용자로 처리됩니다.

-SecurityContext-
Spring Security에서 사용자의 인증 및 권한 정보를 저장하는 중앙 저장소 역할을 하는 인터페이스. 애플리케이션의 현재 실행 중인 스레드와 관련된 보안 컨텍스트를 관리하며, 주로 인증된 사용자의 정보를 유지합니다.

-Bearer 토큰-
Bearer 토큰은 사용자가 API 서버에 요청을 보낼 때 Authorization 헤더에 포함되는 보안 토큰입니다.
이 토큰은 서버에서 사용자를 인증하는 데 사용됨.

-API (Application Programming Interface)-
소프트웨어 응용 프로그램이 서로 통신하고 상호 작용할 수 있도록 해주는 일련의 규칙과 도구를 말합니다. 쉽게 말해, API는 두 시스템 간의 중개자 역할을 하며, 한 시스템이 다른 시스템의 기능을 사용할 수 있게 합니다.

  • API의 구성 요소
    • 엔드포인트(Endpoints): 클라이언트가 서버에 요청을 보내는 URL입니다.
    • 요청(Request): 클라이언트가 서버에 보내는 메시지입니다. 요청은 메소드, URL, 헤더, 본문으로 구성될 수 있습니다.
    • 응답(Response): 서버가 클라이언트의 요청에 대해 보내는 메시지로, 상태 코드, 헤더, 본문으로 구성됩니다.
  • API의 유형
    • REST API: 가장 널리 사용되는 웹 API 유형으로, HTTP를 통해 데이터를 교환합니다. REST API는 리소스 중심의 구조를 가지고 있으며, URL을 통해 리소스를 식별하고, HTTP 메소드를 사용하여 해당 리소스에 대한 작업을 수행합니다.

JwtFactory 클래스

사용자 정보를 기반으로 JWT를 생성하고, 생성된 JWT의 유효성을 검사하며, JWT에서 사용자 정보를 추출하는 기능을 제공합니다.

-Bean-
스프링 프레임워크에서 매우 중요한 개념으로, 스프링 IoC(Inversion of Control) 컨테이너에 의해 관리되는 객체를 의미합니다. 스프링 애플리케이션에서 사용되는 모든 객체들은 스프링이 관리하는 Bean으로 정의될 수 있습니다.

-스프링 IoC 컨테이너-
애플리케이션에서 객체(Bean)를 생성하고 관리하며, 객체들 간의 의존성을 설정해주는 역할. 컨테이너는 애플리케이션이 실행될 때 Bean을 생성하고 초기화하며, 필요할 때 Bean을 주입해줍니다.

0개의 댓글