JWT란?
JSON Web Token 의 줄임말이다.
JSON 객체에 인증에 필요한 정보들을 담은 후 비밀키로 서명한 (암호화 시킨) 토큰이다.
웹 토큰 기술의 한 종류로, 웹 애플리케이션 및 API에서 사용자 인증과 권한 부여를 관리하기 위한 도구이다.
간략한 작동 방식은 JWT(Access Token)을 HTTP 헤더에 실어 서버가 클라이언트를 식별한다
그림으로 설명하자면,
유저가 로그인하면 서버에서는 해당 유저의 정보를 기반으로한 토큰을 생성하고, 이 토큰을 유저에게 전달한다.
유저는 이 토큰을 가지고 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)로 서명한 전자서명이 담겨 있다
JWT 장단점
장점:
- 간편한 전송 및 인코딩 : JSON 형식과 Base64 인코딩을 사용하여 데이터를 안전하게 전송 가능.
- 상태를 저장하지 않음 : 서버는 클라이언트의 상태를 저장하지 않고, 확장성이 좋음.
- 자가 수용적 (Self-contained) : 토큰에 필요한 정보를 자체적으로 포함하고 있어 서버에서 상태를 저장할 필요 없음.
- 유연성 및 확장성 : 표준화된 포맷으로 다양한 플랫폼과 언어 간 상호 운용 가능.
- 보안 향상 : 서명 및 검증으로 토큰의 무결성을 확인하며, 토큰이 변조된 경우 탐지 가능.
단점:
- 토큰의 크기 : Base64 인코딩으로 크기가 커질 수 있어 대역폭 소모 가능성.
- 보안 문제 : 토큰이 클라이언트에 저장되기 때문에 유출 시 보안 문제 발생 가능.
- 토큰 재발급 문제 : 토큰이 유출된 경우 유효 기간이 끝날 때까지 보안이 보장되지 않을 수 있음.
- 중앙 집중식 관리 : 토큰의 유효성을 확인하려면 서버 측에서 토큰의 서명 키를 알아야 함.
다음 포스팅에는 나의 진행중인 winter-spurt 프로젝트 Express.js 에 접목시켜 볼 것이다.
'Computer Science (CS) > 인터넷 공학' 카테고리의 다른 글
[인터넷 공학] 흐름제어(Flow Control)와 TCP혼잡제어 (Congestion Control) (0) | 2023.01.18 |
---|---|
[인터넷 공학] OSI 7계층, TCP/IP 4계층과 프로토콜 (0) | 2023.01.15 |