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토큰방식에 대해 좀더 명확히 알게 된 것 같습니다.