프로젝트를 진행하다 보면, 필요에 의해서 로그인 기능을 구현해야할 때가 찾아온다.
로그인 기능을 구현하는 방법에는 Session을 이용하는 방식, Cookie를 이용하는 방식, Token을 이용하는 방식이 존재하는데, 이번 포스팅에서는 JWT의 개념에 대해서 알아보고 다음 포스팅에서 Login 기능을 구현할 예정이다.
JWT(Json Web Token)
JWT란 Json Web Token의 약자로 Json 형식을 사용하여 사용자의 정보를 저장하는 Claim 기반의 Web Token이다.
JWT는 Token 자체를 정보로 사용하는 Self-Contained 방식으로 정보를 안전하게 전달한다.
JWT의 구조
Header, Payload, Signature로 이루어져있으며, Json 형태인 각 부분은 Base64Url로 인코딩 되어있다.
또한, 각 부분들을 이어주기 위해서 각 부분 뒤에는 . 구분자를 통해 구분한다.
Header
Header에는 JWT 토큰의 alg, typ가 존재한다.
alg는 어떤 알고리즘을 사용하여 Hash 처리와 서명 및 토큰 검증에 사용할 것인지 지정하는 것이다.
typ은 토큰의 타입을 지정한다. 여기서는 typ은 JWT이다
Payload
Payload에는 토큰에서 사용할 정보의 조각인 Claim이 담겨있다.
Claim은 크게 3가지의 부분으로 나뉘어져 있으며, Registered Claim, Public Claim, Private Claim으로 구성된다.
Registered Claim
토큰 정보를 표현하기 위해 이미 정해진 종류의 데이터들로, 선택적으로 작성이 가능하다.
또한 Json 형식으로 저장되기때문에, key와 value의 쌍으로 이뤄져있는데, key는 JWT의 간결성을 위해서 길이 3의 String으로 설정한다.
Public Claim
사용자 정의 클레임으로, 공개용 정보를 위해 사용된다.
충돌방지를 위해서 URI 포맷을 사용한다.
Private Claim
사용자 정의 클레임으로, 서버와 클라이언트 사이에 임의로 지정한 정보를 저장한다
Example
eyJhbGciOiJIUzI1NiJ9.eyJFbWFpbCI6InRlZXMzMzU5QGdtYWlsLmNvbSIsImlhdCI6MTY5OTUxODQ4MSwiZXhwIjoxNjk5NjA0ODgxfQ.VwdR5fAQFk1DD2ZfEfK3_5FZt0kPuOW8gMryWeZ55B0
dot(.) 을 기준으로 Header, Payload, Signature로 구성된 Example JWT Token이다.
'Backend > Framework' 카테고리의 다른 글
[Spring Boot] Spring Framework의 구성 요소와 배경 (0) | 2024.07.09 |
---|---|
[Springboot] AWS S3 with Spring Boot3 (1) | 2024.04.29 |
[Springboot] 로그인 구현 & JWT (2) - 로그인 구현 (1) | 2023.11.15 |
[Springboot] Springboot에서 Redis를 사용해보자! (0) | 2023.10.15 |
[Springboot] WebSocket & STOMP (0) | 2023.10.04 |