다음은 <깔끔한 파이썬 탄탄한 백엔드> 책을 정리한 내용입니다
많은 api에서 인증은 공통적으로 구현되는 엔드포인트
Private api는 물론, public api 도 기본적인 인증을 요구함
private api는 사용할 수 있는 사용자/클라이언트를 제한해야하므로 당연히 인증 엔드포인트가 필요함
Public api는 공용이라서 사용자/클라이언트 제한은 없지만, 사용횟수 제한, 남용방지, 사용자 통계 등의 이유로 인증 엔드포인트를 대부분 필요로 함
- 인증
- 사용자의 비밀번호 암호화
- Bcrypt
- JWT(Json Web Tokens)
사용자의 신원을 확인하는 절차
웹사이트에서 사용자가 로그인을 하여 아이디와 비번을 확인하는 절차(로그인 기능을 구현)
프론트/백엔드 api 상에서의 로그인 절차
사용자 비밀번호 암호화
왜 사용자의 비밀번호를 데이터베이스에 저장할 때 암호화해서 저장해야 하는가?
사용자의 비밀번호를 암호화할 때는 단방향 해시 함수가 쓰임
단방향 해시 함수는 복호화할 목적으로 저장하지 않고, 온전히 본래의 비밀번호 값을 알지 못하도록 방지하는데에 목적이 있다.
파이썬에서는 단방향 해시 함수를 구하는 모듈을 제공함
import hashlib
m = hashlib.sha256() #sha256 암호 알고리즘을 선택함
m.update(b"test password") #암호화하고자 하는 값을 인자로 설정해서 update메소드를 호출. update 메소드는 바이트 값을 받으르모 bprefix를 스트링 앞에 붙여 바이트로 변환함
m.hexdigest() #암호화된 값을 hex(16진수)값으로 읽어들임
bcrypt 암호 알고리즘
단방향 해시 암호 알고리즘은 복호화를 할 수 있는 암호 알고리즘이 아니다.
상식적으로 생각하기에는 일단 암호화가 되면 원본 값을 절대 복구할 수 없을 것으로 생각함.
단방향 해시 암호 알고리즘 해킹방법이 있다! rainbow attack