JWT(Json Web Token)은 웹 표준으로써, 서버와 클라이언트 사이에서 정보를 안전하게 전송하기 위해 도움을 주는 웹 토큰(Web Token)이다.
header.payload.signature
의 형식으로 3가지의 데이터를 포함한다. (개미처럼 머리, 가슴, 배).
이 포함된 데이터여야 한다.다시 정리하면,
JWT(Json Web Token)는 크게 세 부분, 헤더(Header), 페이로드(Payload), 서명(Signature)로 구성되어 있다. 각각의 부분은 점(.)으로 분리된다.
JWT의 구조는 https://jwt.io/ 에서 간단히 확인할 수 있다.
JWT는 오픈소스 라이브러리로 사용하기위해선 라이브러리 설치를 해야한다.
yarn add jsonwebtoken
or npm install jsonwebtoken
이제 암호화를 해보자.
import jwt from 'jsonwebtoken';
const token = jwt.sign({ myPayloadData: 1234 }, 'mysecretkey');
console.log(token);
라이브러리를 불러오고, token에 데이터를 암호화하여 넣어준다.
이 때 sign이라는 메소드가 사용되고, 첫 번째 인자는 데이터, 두 번째 인자는 비밀키로 사용한다.
복호화는 위 코드에 아래 코드를 추가해보자.
const decodedValue = jwt.decode(token);
console.log(decodedValue);
이러면 복호화된 데이터는 decodedValue에 들어가게 된다.
복호화를 위해 decode라는 메소드를 사용한다.
데이터가 변조되지 않은 데이터인지 검증하는 방법도 있다.
const decodedValueByVerify = jwt.verify(token, "mysecretkey");
위와 같이 작성해주면 decodedValueByVerify 에는
암호화된 token과 비밀키인 mysecretkey를 가지고
JWT가 변조되지 않았고, 올바른 비밀 키로 서명되었는지를 검증한다.
JWT에 대해 알아보았다.
누구나 복호화할 수 있다는게 특이하다..
변조만 막을 뿐 유출은 막지 못하는 것인가 하는 생각이 든다.
결국 중요한 데이터는 다른 암호화 방식을 사용하나보다 싶었다.