JWT(JSON Web Tokens)는 토큰 기반 인증 방식으로, 필요한 정보를 토큰
body
에 저장하여 사용자가 가지고 있으며, 사용자는Access Token
(JWT Token)을Header
에 실어 서버로 보내 인증을 위한 증명서 처럼 사용합니다.
JWT는 보통
회원 인증
에 많이 사용됩니다. 로그인 성공 후 개인 정보를token
형식으로encode
하여 사용자가 가지고있다가인증
이 필요할때 JWT를 다시decode
후AUTH
인증을 합니다.
JWT의 구성요소에는
Header
,Payload
,Signature
가 있습니다.
사용자 인증 관련 정보
가 담깁니다. 더 많은 정보를 추가해둘 수 있습니다. 노출
과 수정
이 가능하기 때문에 인증이 필요한 최소한의 정보 만 담아야 합니다.Header
와 Payload
를 가지고 발급해준 서버가 지정한 secret key로 암호화 합니다.토큰 발급후 누군가 Payload정보를 수정시 Payload에 조작된 정보가 들어가 있지만
Signature
에는 변경되기전Payload
를 내용을 기반으로 암호화된 결과가 저장되어 있습니다.
즉,조작한 Payload
와Signature
는 서로 다른값이 나오기 때문에 토큰에 대한 조작여부를 확인할 수 잇습니다.
서버자원
을 절약할 수 있습니다.Signature
암호화를 해독할 수 있는 secert key
가 공유된 서버라면 토큰을 받는 서버가 검증까지 마칠 수 있습니다. 인증을 처음 배울때 Session으로 저장하는 방식을 먼저 배웠습니다. 사용자 정보를 session으로 저장한다면 로그인시 내 정보는 A컴퓨터 session에 저장하였지만 LB(로드밸런싱)가 B컴퓨터로 보낸다면 난 로그인 하지 않은 상태로 보여주기 때문에 token방식 으로 회원인증 유무를 검증하는 방식을 많이 선호한다는 점은 개발일을 할 때 느꼈었지만 깊게 알지 못한 상태로 사용하였으나 이번에 항해 1주차 프로젝트를 진행하며 JWT토큰방식에 대해 좀더 명확히 알게 된 것 같습니다.