JWT ( Json Web Token )은 웹 표준으로 서버와 클라이언트 사이에서 정보를 안전하게 전송하기 위해 도움을 주는 웹 토큰 ( Web Token )이다.
- JSON 형태의 데이터를 안전하게 전송하고 검증할 수 있는 기능을 제공한다.
- 인터넷 표준으로 자리잡은 규칙이다.
- 다양한 암호화 알고리즘을 사용할 수 있어, 신뢰성을 보장한다.
- header.payload.signature의 형식으로 3가지의 데이터를 포함한다.
JWT 형태
JWT는 앞서 언급했듯이, 크게 세 부분, 헤더 ( Header ), 페이로드 ( Payload ), 서명 ( Signature )로 구성되어 있다.
각각의 부분은 점 ( . ) 으로 분리된다.
JWT의 구조는 https://jwt.io/ 에서 확인할 수 있다.
- Header : 헤더는 토큰의 타입과 어떤 암호화를 사용해 생성된 데이터인지 정듸외어 있다.
{
"alg": "HS256",
"typ": "JWT"
}
- Payload : 페이로드는 실제 전달하려는 데이터를 담고 있다. 대표적으로 개발자가 원하는 데이터를 저장한다.
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
- Signature : 서명은 헤더와 페이로드, 그리고 비밀 키 ( Secret Key )를 이용해 생성된다. 이 서명은 토큰이 변조되지 않은 정상적인 토큰인지 확인할 수 있게 도와준다.
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret
)
각 부분은 Base64로 인코딩해, 점 ( . ) 으로 연결하면 최종적으로 JWT를 생성하게 된다. 이렇게 생성된 JWT는 이전에 배운 쿠키 ( Cookie ) 또는 Path Parameter를 통해 전달될 수 있다.
JWT 특성
1. JWT는 비밀 키를 모르더라도 복호화 ( Decode )가 가능하다.
- JWT를 가진 사람이라면 누구나 해당 토큰에 어떤 데이터가 담겨있는지 확인할 수 있다.
- 변조만 불가능 할 뿐, 누구나 복호화해 보는 것은 가능하다는 의미가 된다.
2. 민감한 정보 ( 개인정보, 비밀번호 등 )는 담지 않도록 해야한다.
- JWT의 페이로드는 누구나 복호화해 볼 수 있기 때문이다
3. JavaScript와 같이 특정 언어에서만 사용 가능한것은 아니다
- JWT는 단순히 데이터 형식일 뿐, 단지 개념으로 존재하고, 이 개념을 코드로 구현해 공개된 코드를 우리가 사용하는게 일반적이다.
쿠키, 세션과 다른점
데이터를 교환하고 관리하는 방식인 쿠키 / 세션과 달리, JWT는 단순히 데이터를 표현하는 형식이다.
- JWT로 만든 데이터는 변조가 어렵고, 서버에 별도의 상태 정보를 저장하지 않기 때문에, 서버를 Stateless ( 무상태 )로 관리할 수 있다.
- 쿠키와 세션은 사용자의 로그인 정보나 세션 데이터를 서버에 저장하므로 상태를 유지한다. 따라서 Stateful ( 상태 보존 )하게 데이터가 관리된다.
'IT' 카테고리의 다른 글
[IT] Access Token, Refresh Token (1) | 2024.09.09 |
---|---|
[IT] 인증, 인가 (0) | 2024.09.09 |
[IT] 쿠키와 세션 (0) | 2024.09.08 |
[AWS] RDS 구매하고 사용하기 (0) | 2024.09.05 |
[IT] Javascript - Package Manager ( npm, yarn ) (0) | 2024.08.28 |