JWT(Json Web Token) 란?

이재문·2021년 11월 23일
0

Django

목록 보기
1/2
post-thumbnail

JWTJson Web Token의 약어로 json객체로 정보를 안전하게 전송하기 위한 메소드이다. 정보를 안전하게 전송하기 위해 알고리즘을 이용하여 암호화시킨다.
사용자가 로그인에 성공한 경우 access token을 이용하여 암호화된 유저 정보를 첨부해서 request를 보내게 된다. access token 방법 중 하나가 JWT이다.

JWT를 사용하는 경우

  • 권한 부여 : JWT를 사용하는 가장 큰 이유. 사용자가 로그인하여 사용하는 여러가지 상황에 token을 사용하여 token에 맞게 정보를 주거나 권한을 부여 할 수 있다. 그러므로써 생기는 사용자의 편의와 서버의 자원이 절약될 수 있다.
  • 정보 교환 : JWT으로 정보 교환을 한다면 header와 payload에 의해 발신자와 수신자의 사이에서 정보교환중 생기는 변조가 증명 될 수 있다. 그리고 개인이나 공동으로 사용하는 key를 이용하면 발신자와 수신자가 확실하게 알 수 있다.

JWT의 구조

JWT의 구조는 크게 세가지로 나눌 수 있다.

  • Header
  • Payloda
  • Signature

각 구조별로 '.'을 이용하여 구분한다.
Header - 토큰의 타입과 해시 암호화 알고리즘으로 구성되어 있다.
토큰의 유형, 해시 알고리즘을 나타낸다.

Payload - 토큰에 담을 claim을 포함한다. claim에는 name과 value가 한쌍으로 들어가있다.

claim에는 세가지 유형이 있다.

  • registered
  • public : JWT를 사용하는 사람에 의해 마음대로 정의될 수 있다. 그러나 충돌을 방지하려면 JWT 레지스트리에 정의하거나 충돌 내성 네임스페이스를 포함하는 URI로 정의해야 한다.
  • private : 이용에 동의하고 등록 또는 공개 청구권이 아닌 당사자 간에 정보를 공유하기 위해 만들어진 청구권이다.

Signature - Signature을 작성하려면 인코딩된 header와 payload, Secret_Key, 지정된 Algorithm을 가져와야한다.
Signature은 도중에 정보가 변경되지 않았음을 확인하는 데 사용되며, 개인 키로 서명한 토큰의 경우 JWT의 발신인이 누구인지 확인할 수도 있다.

JWT을 발급하는 방법

JWT의 기본적인 발급 방법으로

jwt.encode({'id':id},SECRET_KEY,algorithm='ALGORITHM종류')

'id' 뒤에 있는 id 는 유저의 개인적인 id가 아닌 databases에 순서된 id를 입력한다.
token을 분해하며 개인정보가 노출될 수 있기 때문에 개인정보는 절대 담아선 안된다.

profile
이제부터 백엔드 개발자

0개의 댓글