
[ JWT 생성하고 Decoded하는 사이트 ]
jwt.io
[ JWT는 세 부분으로 구성 ]

Header, Payload, Signature 이 중 Payload 부분에는 전송하고자 하는 데이터(클레임)가 JSON 형태로 포함된다. 그러나 JSON은 문자열 데이터만 포함할 수 있기 때문에, 바이너리 데이터(예: 사진)를 직접 포함시킬 수 없다. 이런 문제를 해결하기 위해 Base64 인코딩을 사용한다.
[ Base64를 사용한다 ]


Base64 인코딩은 바이너리 데이터(ex.사진)를 문자열로 변환하는 인코딩 방식. 때문에 문자열밖에 전송하지 못하는 json에 바이너리 데이터를 얹어서 같이 전송할 수 있다! 사용자의 프로필 사진이랑 username이랑 같이 전송하려면 mutipart~~그 타입으로 밖에 안된다. 그러니까 이걸 JWT의 Payload에 포함시키고 싶을 때, 사진 파일을 Base64로 인코딩하여 문자열로 변환한 후, 이를 Payload에 포함시켜 문자열로 같이 전송!
[ Signature(서명) HMACSHA256 ]


세 번째 부분 Signature(서명)은 디코딩이 안되네... Header와 Payload를 합친 것을 특정 알고리즘(HMAC SHA256)으로 해싱하고, 비밀키를 사용하여 생성된다. 때문에 이 서명 부분은 단방향 해시 함수를 사용하여 생성되기 때문에, 일단 생성되면 원본 데이터로 디코딩할 수 없다. * 전자 서명을 하면 부인 방지의 용도로 이용하고자 하는 것

우리한테 중요한 건 이것!
근데 비밀번호를 여기다가 넣으면 아주 큰일나는 겁니다.
Share article