jwt를 이용한 토큰 발행 / 검사

김예랑·2021년 7월 1일
0

토큰 : 클라이언트에게 발행하는 통행증 비스무리한 것

토큰을 사용하는 이유

  • HTTP는 그 전의 통신을 기록하지 않는다. (단기 기억 상실 비스무리)
  • 따라서 로그인한 클라이언트가 그 후에 요청을 보낼 시
  • 해당 사이트에서는 그 클라이언트가 로그인 했다는 사실을 모른다.
    => .......... 로그인이 필요한 서비스를 이용할 수 없다.

이런 이유로 토큰이라는 통행증을 발행, 검사하여 서비스 이용을 수월하게 한다.

토큰 발행 및 검사 과정의 예

  • 특정 클라이언트가 특정 사이트에 로그인 성공시 토큰을 발행 받는다.
  • 해당 클라이언트는 그 후로 해당 사이트에 요청을 보낼 때마다 토큰을 함께 보낸다.
  • 해당 사이트에서는 토큰이 유효하다는 것을 검사 후 해당 클라이언트가 로그인한 상태라는 것을 안다.
    => 클라이언트는 로그인이 필요한 서비스를 이용할 수 있다.

파이썬에서 JWT(Json Web Token)을 이용해보자.

<jwt 설치, 임포트>

  • 설치
pip install pyjwt
  • import
import jwt # pyjwt로 설치하지만 import할 때에는 jwt로 import한다.

<토큰 발행>

회원가입 성공 시나 로그인 성공 시 토큰을 발행하는게 일반적이다.
아무튼 토큰을 발행하는 경우라고 가정하고..

  • jwt.encode method를 이용한 토큰 생성, 발행 예시
access_token = jwt.encode({'id': 1}, SECRET, algorithm="HS256")

return JsonResponse({'access_token': access_token}, status=200)


# jwt.encode(담을 정보, 시크릿 키, 알고리즘)
# 담을 정보는 민감하지 않은 정보(pk등)만을 담아야 한다. (복호화 될 가능성이 있기 때문에)
  • jwt.decode method를 이용한 토큰 검사 예시
def get(self, request):
	access_token = request.headers.get('Authorization')
	pay_load = jwt.decode(access_token, SECRET, algorithms=["HS256"])
    	# pay_load = {'id': 1}
        
        return JsonResponse({'user_id': pay_load['id']}, status=200)

유효한 토큰일 경우, 토큰을 디코딩해서 해당 유저의 정보(pk등)을 가져와 원하는 작업을 할 수 있다.

profile
안녕하세요. 백엔드 애송이 백송이 김예랑 입니다.

0개의 댓글