쿠키는 클라이언트에 저장되는 key와 value로 이루어진 데이터이다.
인증 유효 시간을 설정할 수 있고 유효 시간이 정해진다면 클라이언트가 종료되어도 쿠키가 유지된다.
서버와 요청 응답으로 인해 쿠키가 저장되면 다음 요청은 쿠키에 담긴 정보를 이용해 참조한다.
[쿠키 동작 방식]
세션은 쿠키를 기반으로 하지만 클라이언트에 저장하는 쿠키와는 다르게 서버에 저장하여 관리한다.
서버에서는 클라이언트를 구별하기 위해 각각의 세션ID를 클라이언트마다 부여하게되며 클라이언트가 종료되기 전까지 유지한다. 클라이언트에 저장하는 쿠키보다는 보안이 좋다.
[세션 동작 방식]
JWT는 Json Web Token의 약자이고 인증에 필요한 정보들을 암호화시킨 토큰을 말한다.
세션 방식처럼 토큰 자체를 쿠키에 담아서 보내줄 수도 있고 HTTP 헤더에 담아서 보내줄 수도 있다.
토큰은 3가지 요소로 구성되어 있다.
Header: 3가지 요소를 암호화할 알고리즘 등과 같은 옵션이 들어간다.
Payload: 유저의 고유 ID 등 인증에 필요한 정보가 들어간다.
Verify Signature: Header, Payload와 Secret Key가 더해져 암호화된다.
Header.PayLoad.VerifySignature로 만들어진다.
Header와 Payload는 누구나 디코딩하여 내용을 확인할 수 있기때문에 유저의 비밀번호 같은 정보는 넣지 않도록 한다. 하지만 Secret Key를 알지 못하면 VerifySignature는 복호화할 수 없다.
그렇기 때문에 토큰을 변조하더라도 VerifySignature가 Payload를 기반으로 암호화 되었기 때문에 유효하지 않은 토큰으로 검증이 가능하다.
[토큰 동작 방식]