[Web] JWT
in Web
JWT (Json Web Token)
- JSON 포맷을 이용하여 사용자에 대한 정보를 저장하는 Claim 기반 Web Token
- 토큰 자체를 정보로 이용하는 Self-Contained 방식
- JWT 를 포함해 요청을 보내면 서버는 허가된 JWT 인지 검사
JWT 구조
- Header, Payload, Signature 세 부분으로 이루어짐
- Header: 위 세 가지 정보를 암호화할 방식(alg), 타입 등이 들어감
- Payload: 서버에서 보낼 데이터가 들어감. 유저 고유 ID 값, 유효기간 등
- Verify Signature: base64 방식으로 인코딩한 header, payload 그리고 secret key 를 더한 후 서명
- Header, Payload 는 인코딩될뿐 암호화되지 않아서 누구나 볼 수 있음
- 하지만, Verify Signature 는 Secret Key 를 가지고 있는 서버만 복호화 가능(조작이 불가능)
- JSON 형태인 각 부분은 base64로 인코딩되어
.
를 구분자로 사용하여 표현
생성된 토큰은 HTTP 통신 시 Authroization 이라는 key 의 value 로 사용됨
{
"Authorization": "Bearer {생성된 토큰 값}",
}
JWT 인증 과정
- 사용자가 로그인
- 서버에서는 계정정보를 읽어 사용자를 확인 후, 사용자의 고유한 ID값을 부여한 후, 기타 정보와 함께 Payload에 담음
- JWT 토큰의 유효기간을 설정
- 암호화할 SECRET KEY를 이용해 ACCESS TOKEN을 발급
- 사용자는 Access Token을 받아 저장한 후, 인증이 필요한 요청마다 토큰을 헤더에 실어 보냄
- 서버에서는 해당 토큰의 Verify Signature를 SECRET KEY로 복호화한 후, 조작 여부, 유효기간을 확인
- 검증이 완료된다면, Payload를 디코딩하여 사용자의 ID에 맞는 데이터를 응답