JWT(JSON Web Token)는 정보를 JSON 객체로 안전하게 전송하기 위한 독립적인 방식
디지털 서명이 되어있는 정보이기 때문에 신뢰할 수 있는 정보이다.
- [Header].[Payload].[Signiture] 로 구성되어 있다.
- Header : 두가지 정보를 가지고 있다.
1. typ(타입) : 토큰의 타입을 지정 (ex, JWT)
- alg: Hashing Alogorithm 지정 (ex, HMAC SHA256, RSA)
- Payload(정보)
1. 비공개 클레임 : 보통 클라이언트와 서버와 협의하에 사용되는 클레임 이름( 클레임이란? key와 value의 한쌍으로 이루어진 조각)
ex) "username" : "helloworld"
"userId" : "1231231232"
- signiture(서명)
header를 base64로 암호화 값 + "." + payload를 base64로 암호한 값, secret 값을 HMAC SHA256으로 암호화한 값이다.
(*Base64 : 암호화/복호화를 할 수 있는 암호이다.)
(*secret : 서버만 알고 있는 정보)
- 트래픽 대한 부담이 낮음
- 독립적인 JWT
- 별도의 인증 저장소가 필요 없다.
- URL 파라미터와 헤더로 사용
- REST 서비스로 제공 가능
- 내장된 만료
- stateless, JWT는 상태를 저장하지 않기 때문에 한번 만들어지면 제어가 불가능하다. 즉, 토큰을 임의로 삭제하는 것이 불가능하므로 만료 시간을 꼭 넣어주어야 한다.
- 토큰 자체에 정보를 담고 있으므로 독이 될 수도 있다.
메타코딩 유튜브
메타코딩 유튜브를 참고하였습니다.