용도
- 주로 토큰 관련 인증을 사용한 로그인에 활용된다
- 웹 표준을 따르기에 대부분 언어에서 지원한다.
기본적으로 사용자는 로그인을 통해서 인증을 받고, 필요한 권한을 인가받는다.
그런데, 요청 API와 Body만 알고 있다면, 로그인을 하지 않아도 서버에 요청을 보낼 수 있을 것이다.
⇒ JWT를 사용해서 현재 요청을 보낸 사용자가 로그인을 한 사용자인지 확인하는 과정이 필요하다 (즉, 인증에 사용됨)
플로우
- 사용자가 ID/PWD를 보내면, 이를 확인하여 로그인 처리
- 사용자 로그인 성공 시, 응답으로 JWT 토큰 발급
- 사용자는 JWT 토큰과 함께 요청을 보내고, 이를 활용하여 사용자 로그인 여부 확인
구조
헤더 (header)
- 해싱 알고리즘과 토큰 타입 정의 가능
- 인코딩은 base64 방식으로 되는듯?
{
"alg": "HS256",
"typ": "JWT"
}
페이로드 (payload)
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
- 각각의 키를 claim이라고 부르고 세 가지로 나뉨
- registered claim
- iss, exp, sub, aud와 같이 필수는 아니지만 사용이 권장되는 클레