JWT란, Json Web Token의 약어로서, JSON 형식의 데이터를 저장하는 토큰입니다. JWT는 특히 3가지 부분으로 구성되어 있습니다.
헤더(HEADER)
: 토큰의 종류, 해시 정보 알고리즘을 담는 곳페이로드(PAYLOAD)
: 실질적인 토큰의 내용물을 인코딩하여 담는 곳시그니처(SIGNATURE)
: 일련의 문자열로서, 이것을 통해 토큰이 변조되었는지를 확인이때, 시그니처
는 헤더와 페이로드를 비밀키로 암호화한 부분입니다. 따라서 우리는 비밀키를 꼭꼭 잘 숨겨야합니다!!!!!
JWT의 원리를 직접 느껴보고 싶다면, 실습 사이트 이곳에서 직접 연습해볼 수 있습니다.
토큰 기반 시스템은 stateless하다. 즉, 상태를 유지하지 않습니다. 따라서, 어떤 request가 들어와도 모두 처음 요청된 request 처럼 인식하는 것입니다. 이 시스템에서는 유저의 인증 정보를 서버나 세션 DB에 담아두지 않습니다. 따라서, 유저 인증 정보를 서버 측에 담아둠으로써 발생했던 모든 문제들을 해결할 수 있습니다. 보다 자세한 시스템은 다음과 같습니다.
1) 유저가 아이디와 비밀번호로 로그인 합니다.
2) 서버측에서 해당 계정정보를 검증합니다.
3) 계정정보가 정확하면, 서버측에서 유저에게 signed
토큰을 발급합니다.
4) 클라이언트 측에서는 전달받은 토큰을 저장해두고, 서버에 요청을 할때마다, 해당 토큰을 함께 서버에 전달합니다.
5) 서버는 토큰을 검증하고, 요청에 응답합니다.
참고로, SECRET_KEY는 비밀키생성 사이트 이곳을 참고하시길 바랍니다.