[Bcrypt & PyJWT] 사용법

dhkim·2020년 7월 19일

Bcrypt & PyJWT

목록 보기
2/2

Bcrypt

  • password 를 암호화 해줌

Bcrypt, pyjwt 설치, 실행

pip install bcrypt

pyjwt는 jwt(json web token)을 암호화, 복호화 해주는 파이썬 라이브러리 이다
위의 명령어를 이용하여 bcrypt를 설치하고 아래의 명령어를 이용하여 import 해주기

import bcrypt

Bcrypt 를 이용하여 암호화 하기

bcrypt에서 암호화할 때는 str데이터가 아니라 Bytes(이진화) 데이터를 이용한다
따라서 암호화할 때 암호화 할 내용을 bytes화 해줘야한다

python에서 str을 encode하면 bytes가 되고 bytes 를 decode하면 str가 된다
encode, decode 는 인식이 가능한 형태로 환 하기위해 'UTF-8'유니코드를 사용한다

password = '1234'
ashed_password = bcrypt.hashpw(password.encode('utf-8') 가 이 역할을 한다

, bcrypt.gensalt())
print(ashed_password)

#출력결과
b'$2b$12$YFs9rh.1LgJwZuf9ibyjpuLvBoCaGX0MzedFWF2Jo0zU3lMZurZ4a'

위와 같은 방법으로 암호화된 비밀번호를 얻을수 있다
암호화 함수는 bytes string 에서만 작동하기 때문에, 해싱하기전 password를 bytes string으로 변환 해줘야한다
password.encode('utf-8') 가 이 역할을 한다

이렇게 암호화된 방식은 일방향 암호화 (복호화 할수 없음) 를 사용한 방식이다
비밀번호를 확인하는 작업은 bcrypt의 bcrypt.checkpw() 매소드를 사용하면 된다

bcrypt.checkpw(입력받은 패스워드, 저장된 암호화 패스워드)

이렇게 사용할수 있고 데이터타입은 bytes여야 한다


토큰 발행

먼저 jwt를 설치한다

pip install pyjwt

사용자가 id, password를 입력해 로그인 버튼을 누르면 서버는 id,password를 db에 저장된 것과 비교하고 인증이 오나료되면, 회원에게 토큰을 발행해준다.
그 토큰은 사용자 브라우저의 쿠키나 세션스토리지에 저장되 서버에 데이터를 요청할때마낟 토큰을 담아서 정보를 요청하고, 서버는 해당 토큰을 검증한 뒤 데이터를 전송한다.

#python

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

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

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

# 출력결과
b'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6MX0.-xXA0iKB4mVNvWLYFtt2xNiYkFpObF54J9lj2RwduAI'

jwp를 import한 후 토큰 대상, 시크릿 키, 해싱 알고리즘을 차례로 넣어준다

이렇게 발급된 토큰은 프론트엔드 엔지니어에게 전달해야한다
인증을 통과한 사용자만 접근하려면 토큰을 받아서 다시 우리가 발행한 토큰이 맞는지 확인 해야한다

header = jwt.decode(access_token, SECRET, algorithm = 'HS256')
print(header)

# 출력결과
{'id': 1}

decode 값은 방금전 encode할 때 넘겼던 header값인 id=1 이다
이처럼 header값을 통해 유저를 식별할 수 있다

인증하는 코드는 데코레이터로 구현해야한다
데코레이터 구현은 user app에 utils.py를 만들어서 작성한다

0개의 댓글