프로그래밍 언어/NODE JS

JWT 토큰으로 인증하기 (1)

· 코딩마이데이

JWT는 JSON Web Token의 약어로, JSON 형식의 데이터를 저장하는 토큰입니다. JWT는 다음과 같이 세 부분으로 구성되어 있습니다.

  • 헤더(HEADER): 토큰 종류와 해시 알고리즘 정보가 들어 있습니다.
  • 페이로드(PAYLOAD): 토큰의 내용물이 인코딩된 부분입니다.
  • 시그니처(SIGNATURE): 일련의 문자열이며, 시그니처를 통해 토큰이 변조되었는지 여부를 확인할 수 있습니다.

시그니처는 JWT 비밀 키로 만들어집니다. 이 비밀 키가 노출되면 JWT 토큰을 위조할 수 있으므로 비밀 키를 철저히 숨겨야 합니다. 시그니처 자체는 숨기지 않아도 됩니다.

 

JWT 토큰 예시

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.KMUFsIDTnFmyG3nMiGM6H9FNFUROf3wh7SmqJp-QV30

 

JWT에는 민감한 내용을 넣으면 안 됩니다. 내용을 볼 수 있기 때문입니다.JWT 토큰은 JWT 비밀 키를 알지 앟는 이상 변조가 불가능합니다. 변조한 토큰은 시그니처를 비밀 키를 통해 검사할 때 들통납니다. 변조할 수 없으므로 내용물이 바뀌지 않았는지 걱정할 필요가 없습니다. 다시 말하면 내용물을 믿고 사용할 수 있습니다.단, 외부에 노출되어도 좋은 정보에 한해서입니다. 비밀번호를 제외하고 사용자의 이메일이나 사용자 권한 같은 것들을 넣어두면 데이터베이스 조회 없이도 그 사용자를 믿고 권한을 줄 수 있습니다.JWT 토큰의 단점은 용량이 크다는 것입니다. 내용물이 들어 있으므로 랜덤한 토큰을 사용할 때와 비교해서 용량이 클 수 밖에 없습니다. 매 요청 시 토큰이 오고 나서 데이터양이 증가합니다. 이렇게 장단점이 뚜렷하므로 적절한 경우에 사용하면 좋습니다. 비용을 생각해보면 판단하기 쉽습니다. 랜덤 스트링을 사용해서 매번 사용자 정보를 조회하는 작업의 비용이 더 큰지, 내용물이 들어 있는 JWT 토큰을 사용해서 데이터 비용이 더 큰지 비교하면 됩니다.