[TIL]Backend Auth
인증,인가 실습1 순서
1.인증 구현 전 비밀번호 암호화를 진행
1-1.암호화 라이브러리 bcrypt 설치
pip install bcrypt
1-2.설치 후 python 인터프리터 실행
실행하고 라이브러리 import
import bcrypt
1-3.암호화
⭐️bcrypt의 암호화 방법!
bcrypt는str
데이터가 아닌Bytes
데이터를 암호화한다.
따라서 암호화시에 bytes화 해야한다.
파이썬에서는str
을 encode하면 bytes(이진화) 되고,Bytes
를 decode하면str
화 한다.
encode, decode시에는 우리가 인식할 수 있는 형태로 변환하기 위해 'UTF-8' 유니코드 문자 규격을 사용한다.
password = '1234'
hashed_password = bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt())
print(hashed_password)
#b'$2b$12$YFs9rh.1LgJwZuf9ibyjpuLvBoCaGX0MzedFWF2Jo0zU3lMZurZ4a'
#암호화 된 비밀번호를 얻었다. data type은 bites
type(hashed_password)
# <class 'bytes'>
이렇게 암호화된 방식은 일방향 암호화로 복호화 할 수 없도록 암호화하는 방식이다.
1-4.비밀번호 확인
양방향으로 확인이 불가능하지만 bcrypt의 bcrypt.checkpw() 메소드로 비밀번호 확인이 가능하다.
new_password = '1234'
bcrypt.checkpw(new_password.encode('utf-8'),hashed_password)
#True
단 이 메소드에는 규칙이 있다.
bcrypt.checkpw() 메소드의 괄호에 들어가는 (입력받은 패스워드, 저장된 암호화된 패스워드)의
데이터 타입이 모두 Bytes
여야 한다.
2.인증 수단인 JWT구현
2-1.라이브러리 설치
pip install pyjwt
2-2.python 인터프리터 실행
import jwt
2-3.token 만들기
SECRET = 'secret' #'랜덤한 조합의 키' 예제이므로 단순하게 'secret'이라고 하겠습니다.
access_token = jwt.encode({'id' : 1}, SECRET, algorithm = 'HS256')
print(access_token)
#b'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6MX0.-xXA0iKB4mVNvWLYFtt2xNiYkFpObF54J9lj2RwduAI'
이제 인증을 위한 매개체를 만든건데 이게 바로 jwt token 일명 access_token이다.
이렇게 발급된 토큰은 다시 decode해서 json형태로 프론트엔드에 보내준다.
2-4.token 확인
그 후에 프론트엔드에 저장 되어있던 토큰을 백엔드에 보내주면 인증을 통과한 사용자만 접근할 수 있도록
우리가 발행한 토큰인지 확인해야한다.
이 경우는 양방향 암호화로 복호화가 가능하다.
header = jwt.decode(access_token, SECRET, algorithm = 'HS256')
print(header)
#{'id': 1}
decode의 결과는 우리가 encode 할 때 넘겼던 header 값인 {'id':1}입니다.
Author And Source
이 문제에 관하여([TIL]Backend Auth), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hyoniii_log/TILBackend-Auth저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)