JwtToken 심화과정

 

암호화 방식에 대해서 Jwt Token 방식을 사용하고있었는데, (Spring으로 Jwt Token값 생성하는 방법은 여기)

이 Jwt Token은 https://jwt.io/ 사이트에 들어가면 토큰의 값을 확인할 수 있다.

처음에는 암호화되서 프론트에 준 값인데 왜 값조회가 가능하지.. 그러면 암호화의 의미가 없지않나? 하는 의문이 들었었다.

 

JWT 구조 파악

Jwt의 값은 Header, Payload, Signature로 나뉜다.

 

이중에서 Payload는 넣고자 하는 실제 데이터부분인데, Payload는 단순히 Base64 인코딩되어있기때문에 Base64 디코딩으로 간단하게 값을 확인할 수 있다.

 

그리고 서버에서 갖고있는 key값으로 이 값들의 안정성을 보증하는게 Signature라고 볼수 있다.

그래서 Payload 값을 임의로 변경했더라도, Jwt Token을 사용하는 서버단에서 Signature값을 확인해서 데이터가 변형되었는지 알 수 있다.

 

예를 들면 한사람의 사진, 나이, 이름, 정보들을 신분증으로 발급하고, 신분증검사를 하는데

검사대상의 인종, 성별, 나이등을 신분증과 비교해서 검증하는것과 비슷하다.

 

결론

JWT의 기능자체는 어떤 데이터를 꽁꽁 감추는게 목적이 아니라,

데이터는 공개적으로 유지하되, 해당 데이터가 믿을수 있는지 안정성을 보장함에 의미가 있다는것을 알게되었다.

그러므로 JwtToken 내부에는 데이터를 구분할 수 있는 최소의 데이터만 넣고, 정말 중요한 정보(이름이나 PW 같은것) 는 넣지 않는것이 좋겠다.