JWT(Json Web Token)의 구조
JWT는 String 타입의 사용자를 식별하는 토큰
xxxxx.yyyyyy.zzzz...
위와 같이 점(.)으로 구분된 3개의 문자열이 합쳐진 하나의 문자열 형태임.
3개의 문자열은 각각
- Header
- Payload
- Signature
Header
토큰의 타입과 해시 암호화 알고리즘을 포함하고 있음
Payload
토큰의 정보인 Claim을 기술하고 있음. Claim에 대한 자세한 설명은 아래애...
Signature
시크릿 키(Secret Key)를 포함하여 암호화한다. 토큰의 정보(Header, Payload)가 신뢰할 수 있는 정보인지를 판단할때 사용
Claim이란?
토큰의 정보로 3가지로 분류됨
- Registered Claim
- Public Claim
- Private Claim
Registered Claim은 이미 정해져 있고, Public Claim과 Private Claim은 사용자가 지정할 수 있음
Registered Claim 목록
- iss : 발급자
- sub : 토큰제목
- aud : 대상자
- exp : 만료시간
- nbf : 토큰 활성 시간
- iat : 토큰 발급 시간
- jti : 고유식별자
JWT 사용자 식별 알고리즘
JWT 기본 구조
[header].[payload].[signature]
signature 파트는 시크릿키(secret key)와 암호화 알고리즘에 의해 "header.payload"를 암호화한 값을 가지고 있음.
서버는 자신이 가진 시크릿키를 이용해 signature를 디코딩해 사용자를 식별한다.
로그인 매커니즘
회원가입을 하면 회원 정보가 DB 회원테이블에 삽인된다.
클라이언트가 서버에 로그인을 요청하면 서버는 사용자의 정보가 유효한지 확인하고, 유효한 사용자일 경우, 토큰을 발급해준다.
클라이언트가 서버에 데이터를 변경하는 HTTP 요청을 한다. 그러면 클라이언트는 HTTP 요청의 Authentication 헤더에 토큰을 포함하여 전송한다.
서버는 클라이언트의 요청이 들어오면 일단 토큰이 유효한지 확인하고, 토큰이 유효한 경우, 해당 토큰이 HTTP 요청 url의 접근/변경 권한이 있는지 확인한다. 토큰이 유효한지 확인하는 것은 인증(Authentication), 권한을 검사하는 것은 인가(Authorization)라고 한다.