jwt 암호화
jwt(Json Web Token)를 사용하여 액세스 토큰 생성
이를 위해서는 3가지의 정보가 필요함
- ACCESS_TOKEN_EXPIRE_MINUTES - 토큰의 유효기간을 의미한다. 분 단위로 설정한다.
- SECRET_KEY - 암호화시 사용하는 64자리의 랜덤한 문자열이다.
- ALGORITHM - 토큰 생성시 사용하는 알고리즘을 의미하며 여기서는 HS256을 사용한다.
SECRET_KEY 생성방법
1) openssl 설치가 되었을 시
openssl rand -hex 32
2) python 에서 사용
import secrets
secrets.token_hex(32)
Token 생성
from jose import jwt
ALGORITHM = "HS256"
data = {
"sub": user.profile_id,
"exp": datetime.utcnow() + timedelta(minutes=ACCESS_TOKEN_EXPIRE_MINUTES)
}
access_token = jwt.encode(data, SECRET_KEY, algorithm=ALGORITHM)
CrytContext 암호화
- 다른 알고리즘을 활용하여 비밀번호를 hash 해주는 모듈
pip install "passlib[bcrypt]"
from passlib.context import CryptContext
pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
CryptContext 파라미터
- schemes
- 여기 있는 hash 알고리즘 중 하나 사용 hash 알고리즘 리스트
- ISO-27001 보안 규정을 준수해야하는 상황이면 PBKDF2
- 보안 시스템을 구현하는데 많은 비용을 투자할 수 있다면, Scrpyt
- deprecated
- 특정 해시 알고리즘을 더 이상 사용하지 않도록 지정
- "auto"로 설정하면, CryptContext가 설정된 기본 알고리즘 외에 다른 알고리즘을 사용할 때 자동으로 deprecated 상태로 처리
- 기본적으로 가장 강력한 해시 알고리즘을 사용하도록 하고, 나중에 알고리즘을 업데이트할 때 유용하게 사용됨
다양한 사용 함수
- .hash("password")
- .identify("password-hashed")
- 여러 알고리즘들 중 하나에 속해져 있는지 확인하는 함수
- 특정 알고리즘을 return 해줌
- verify("password", "password-hashed")
- 들어온 password 값과 원래 hash되어있는 password 와 동일한지 확인하는 함수