보람찬 코기의 개발자 블로그
article thumbnail
반응형

 

 

JWT logo

 

JWT란?

JSON Web Token 의 줄임말이다.

 

JSON 객체에 인증에 필요한 정보들을 담은 후 비밀키로 서명한 (암호화 시킨) 토큰이다.

 

웹 토큰 기술의 한 종류로, 웹 애플리케이션 및 API에서 사용자 인증권한 부여를 관리하기 위한 도구이다.

 

간략한 작동 방식은 JWT(Access Token)을 HTTP 헤더에 실어 서버가 클라이언트를 식별한다

 

 

그림으로 설명하자면,

 

Token auth Flow

 

유저가 로그인하면 서버에서는 해당 유저의 정보를 기반으로한 토큰을 생성하고, 이 토큰을 유저에게 전달한다. 

 

유저는 이 토큰을 가지고 HTTP 헤더를 통해 서버에 요청을 할 때마다 토큰을 함께 전달함으로써 자신의 인증을 증명한다. 

 

이를 통해, 서버는 각 요청에서 토큰을 확인하여 유저의 신원을 검증하며, 세션 관리의 번거로움 없이 간편하게 사용자 인증과 권한 부여를 처리한다. 

 

이는 서버 리소스를 효율적으로 활용하며, 더욱 확장 가능한 아키텍처를 구현할 수 있게 도와준다.

 


JWT 구조

Header는 JWT에서 사용할 타입과 해시 알고리즘의 종류를 정의한다.

 

{
	"alg" : "HS256",			//서명 암호화 알고리즘
   	 "typ" : "JWT"				// 토큰 유형
}

 

이어지는 부분인 Payload는 서버에서 전송한 사용자 권한 정보와 추가적인 데이터를 포함하고 있다.

 

{
	"sub" : "1234"					// 제목
	"iss": "Wellshcorgi"			// 발행자
    	"iat" : 1111					// 발행시간

}

 

마지막으로 Signature는 Header와 Payload를 Base64 URL-safe Encode한 후, Header에서 명시된 해시 함수를 적용하고 개인키(Private Key)로 서명한 전자서명이 담겨 있다

 

https://inpa.tistory.com/


JWT 장단점


장점:

  • 간편한 전송 및 인코딩  : JSON 형식과 Base64 인코딩을 사용하여 데이터를 안전하게 전송 가능.
  • 상태를 저장하지 않음  : 서버는 클라이언트의 상태를 저장하지 않고, 확장성이 좋음.
  • 자가 수용적 (Self-contained)  :  토큰에 필요한 정보를 자체적으로 포함하고 있어 서버에서 상태를 저장할 필요 없음.
  • 유연성 및 확장성  :  표준화된 포맷으로 다양한 플랫폼과 언어 간 상호 운용 가능.
  • 보안 향상  :  서명 및 검증으로 토큰의 무결성을 확인하며, 토큰이 변조된 경우 탐지 가능.

 

단점:

  • 토큰의 크기   :  Base64 인코딩으로 크기가 커질 수 있어 대역폭 소모 가능성.
  • 보안 문제  :  토큰이 클라이언트에 저장되기 때문에 유출 시 보안 문제 발생 가능.
  • 토큰 재발급 문제  :  토큰이 유출된 경우 유효 기간이 끝날 때까지 보안이 보장되지 않을 수 있음.
  • 중앙 집중식 관리  :  토큰의 유효성을 확인하려면 서버 측에서 토큰의 서명 키를 알아야 함.

 

 


 

다음 포스팅에는 나의 진행중인 winter-spurt 프로젝트 Express.js 에 접목시켜 볼 것이다.

반응형
profile

보람찬 코기의 개발자 블로그

@BoChan

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!