JWT (Json Web Token)

codeing999·2022년 8월 9일
0

Node NPM

목록 보기
1/16
post-custom-banner

JWT

JWT란?

JSON Web Token의 약자인데
이름에도 있듯이 JSON 포맷을 사용하고
주로 회원 인증과 두 개체 사이에서 정보 전달을 할 때 사용된다고 한다.

JWT의 구조

JWT 토큰은 .을 구분자로 해서 헤더, 내용, 서명 세가지 문자열로 구성되어 있다.

헤더에는 토큰의 타입(JWT)과 해싱 알고리즘이 무엇인지 들어가 있다.
내용에는 등록된 클레임, 공개 클레임, 비공개 클레임 세가지가 들어간다.
서명은 토큰을 인코딩하거나 유효성 검증 시 사용하는 고유한 암호화코드이다.

JWT의 용도

jwt는 위조변조 여부를 확인하여 내용을 인증하는 용도이지
데이터를 암호화해서 보내는 용도가 아니다.
왜냐하면,
header와 payload 부분은 인터넷에 검색해서 base64로만 디코드 해도 그 내용이 다 보이기 때문이다.
암호화하는 부분은 시그니쳐 부분 뿐이다.
시그니쳐는
base64로 인코드 되어있는 헤더와 페이로드를 똑같이 같고있는데 (점이 사이에 껴있다) 그것을 서버가 갖고있는 개인키로 암호화하고 그것을 다시 base64인코딩한 것이다.

즉, 겉으로 드러나있는 헤더+페이로드와
시그니쳐부분을 서버의 개인키로 복호화한
헤더+페이로드가 일치하는지 여부로
이 데이터가 위변조된 것인지 여부만을 판단하는 것이다.
같다면 변조되지 않은 것이므로 서버가 보내준 그 토큰을 그대로 제출한 이 데이터는 믿을 수 있다고 보고 인증을 해준다는 것이다.

대신 그걸 다른 사람이 똑같이 제출해서 흉내낼 수도 있기때문에 만료기간을 두는 것 같다.

다음과 같을 때 주로 쓰인다.

회원 인증: JWT 를 사용하는 가장 흔한 시나리오 입니다. 사용자가 로그인을 하면, 서버는 사용자의 정보를 기반으로한 토큰을 발급합니다.
그 후, 사용자가 서버에 요청을 할 때 마다 JWT를 포함하여 전달합니다. 서버는 클라이언트에서 요청을 받을때 마다, 해당 토큰이 유효하고 인증됐는지 검증을 하고, 사용자가 요청한 작업에 권한이 있는지 확인하여 작업을 처리합니다.
서버에서는 사용자에 대한 세션을 유지 할 필요가 없습니다. 즉 사용자가 로그인되어있는지 안되어있는지 신경 쓸 필요가 없고, 사용자가 요청을 했을때 토큰만 확인하면 되므로 세션 관리가 필요 없어서 서버 자원과 비용을 절감할 수 있습니다.
정보 교류: JWT는 두 개체 사이에서 안정성있게 정보를 교환하기에 좋은 방법입니다. 그 이유는, 정보가 서명이 되어있기 때문에 정보를 보낸이가 바뀌진 않았는지, 또 정보가 도중에 조작되지는 않았는지 검증할 수 있습니다.

특징

@ 클라이언트에 저장하므로 stateless하다
@ 안에 넣는 값이 커질 수록 토큰 길이도 커져서 부하가 커진다.
@ 페이로드에는 기본적으로 토큰의 만료시간을 위해 iat(토큰발급한 현재시간)이 있어야하고. 거기에 추가로 전달하고싶은 값을 넣는다.

profile
코딩 공부 ing..
post-custom-banner

0개의 댓글