bcrypt - 암호를 해싱해주는 라이브러리
import bcrypt
password='1234'
bcrypt.hashpw(password,bcrypt.gensalt())
타입 에러가 난다 . (바이트화된 데이터를 넣어야한다)
파이썬에서
문자열 '1234' 인코딩 -> 바이트 1234
디코드 바이트 1234 -> 문자열 '1234'
hashed_password=
bcrypt.hashpw(password.encode('utf-8'),bcrypt.gensalt())
1. password='1234'를 인코딩하여 바이트화한다 .
2. 그후 gensalt()을 이용하여 실제 비밀번호 '1234'의 다른 랜덤한 값을 넣어 암호화 한다.
JWT ( JSON Web Tokens)
앞서 언급했듯이 유저가 로그인에 성공한 후에는 accecc tokken 이라고 하는 암호화된 유저 정보를 첨부하여 request를 보내게 된다 .
POST /auth HTTP/1.1
Host: localhost:5000
Content-Type: application/json
{
"username": "joe",
"password": "pass"
}
HTTP/1.1 200 OK
Content-Type: application/json
{
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZGVudGl0eSI6MSwiaWF0IjoxNDQ0OTE3NjQwLCJuYmYiOjE0NDQ5MTc2NDAsImV4cCI6MTQ0NDkxNzk0MH0.KPmI6WSjRjlpzecPvs3q_T3cJQvAgJvaQAPtk1abC_E"
}
그러면 서버에서는 access token
을 복호화 해서 해당 유저 정보를 얻게 된다.
예를들어 access token eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZGVudGl0eSI6MSwiaWF0IjoxNDQ0OTE3NjQwLCJuYmYiOjE0NDQ5MTc2NDAsImV4cCI6MTQ0NDkxNzk0MH0.KPmI6WSjRjlpzecPvs3q_T3cJQvAgJvaQAPtk1abC_E
를 복호화 하면 다음과 같은 정보를 얻는다:
{
user_id = 1
}
복호화해서 얻은 유저 아이디를 통해 해당 유저가 누군지 알 수 있다.
이런 절차의 목적은 해당 유저가 매번 로그인 해도 되지 않도록 하는 것이다.
access token
을 생성하는 방법은 여러가지가 있는데, 그 중 가장 널리 사용되는 기술중 하나가 바로 JWT(JSON Web Tokens)이다.
JWT는 말 그대로 유저 정보를 담음 JSON 데이터를 암호화 해서 클라이언트와 서버간에 주고 받는 것이다.