Json Web Token(JWT) & Authorization

지원석·2021년 12월 23일
1

Project "westagram"

목록 보기
3/3

로그인을 위해서 필요한 것은 '인가(Authorization)'이다. 인가는 유저가 요청하는 request를 실행할 수 있는 권한이 있는 지를 확인하는 절차!

서버는 이를 위해 headers에 access token을 만들어서 보내는데, 이 정보를 'Json Web Token(JWT)'라고 한다.

  • header: 헤더는 토큰의 타입과 알고리즘 정보가 들어간다.
  • payload: 내용에는 만료시간과 비공개 유저 정보가 담겨있다. claim set 이라고도 부른다. {name : value}의 한 쌍으로 구성되어 있고 여러 개의 클레임을 추가할 수 있다.
  • signature: header, payload를 인코딩한 값을 합쳐 secret_key로 해쉬한다.

JWT 사용하기

jwt를 사용하기 위해서는 PyJWT 라이브러리를 설치하여야 한다.

pip install pyjwt

파이썬 인터프리터를 실행해준다.

import jwt #패키지명은 pyjwt이지만 임포트할때의 이름은 jwt입니다.

SECRET = 'secret' #'랜덤한 조합의 키' 예제이므로 단순하게 'secret'이라고 하겠습니다.

access_token = jwt.encode({'id' : 1}, SECRET, algorithm = 'HS256')
print(access_token)
'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6MX0.-xXA0iKB4mVNvWLYFtt2xNiYkFpObF54J9lj2RwduAI'

jwt의 결과물은 pyjwt의 버전에 따라 bytes(ver. 1.7)타입 또는 str(ver. 2.0 이상)타입.
(설치된 pyjwt의 버전을 확인하고, jwt의 ecode 결과의 타입에 따라 btyesstr 의 과정을 진행해야 한다.)

이렇게 발급된 토큰은 어떻게 사용할 수 있을까? 바로 프론트엔드 엔지니어에게 전달해야 하는 것!
그렇다면 이제 인증을 위한 기본 요건이 달성 되었으니, 인증을 통과한 사용자만 접근하려면 토큰을 받아서 다시 우리가 발행한 토큰이 맞는지 확인 해야겠죠?

header = jwt.decode(access_token, SECRET, algorithm = 'HS256')
print(header)
{'id': 1}

decode 결과는 바로 우리가 encode 할 때 넘겼던 header값인 { 'id' : 1}입니다. 이 말은 우리가 담아 넘기는 header 값을 통해 유저를 식별할 수 있다는 이야기입니다.
인증하는 코드는 어디에 구현해야 할까?
바로 엔드포인트에 데코레이터를 구현해야 합니다.
데코레이터 구현은 보통 user app에 utils.py를 만들어서 작성합니다.

(user app?? utils.py???? 열심히 또 공부를 해봐야겠다....)

0개의 댓글