# 7. 인증

jj·2020년 12월 10일
0

다음은 <깔끔한 파이썬 탄탄한 백엔드> 책을 정리한 내용입니다

많은 api에서 인증은 공통적으로 구현되는 엔드포인트

Private api는 물론, public api 도 기본적인 인증을 요구함

  • private api는 사용할 수 있는 사용자/클라이언트를 제한해야하므로 당연히 인증 엔드포인트가 필요함

  • Public api는 공용이라서 사용자/클라이언트 제한은 없지만, 사용횟수 제한, 남용방지, 사용자 통계 등의 이유로 인증 엔드포인트를 대부분 필요로 함

  • 인증
  • 사용자의 비밀번호 암호화
  • Bcrypt
  • JWT(Json Web Tokens)

인증

사용자의 신원을 확인하는 절차

웹사이트에서 사용자가 로그인을 하여 아이디와 비번을 확인하는 절차(로그인 기능을 구현)

프론트/백엔드 api 상에서의 로그인 절차

  1. 사용자 가입절차를 진행해서 사용자의 아이디와 비번을 생성
  2. 가입한 사용자의 아이디와 비밀번호를 데이터베이스에 저장. 이때 비번은 암호화해서 저장
  3. 사용자가 로그인을 할 때, 본인의 아이디와 비밀번호 입력
  4. 사용자가 입력한 비밀번호를 암호화한 후, 그 값을 이미 암호화되어 db에 저장된 비밀번호와 비교
  5. 비밀번호 일치하면 로그인 성공
  6. 로그인에 성공하면 백엔드 api 서버는 access token을 프론트엔드 혹은 클라이언트에게 전송.
  7. 프론트엔드 서버는 로그인 성공 후 다음부터는 해당 사용자의 access token을 첨부해서 request를 서버에 전송함으로써, 매번 로그인하지 않아도 되도록 함

사용자 비밀번호 암호화

왜 사용자의 비밀번호를 데이터베이스에 저장할 때 암호화해서 저장해야 하는가?

  1. 외부의 해킹 공격에 의해 데이터베이스가 노출되었을 경우에 대비하기 위해
  2. 내부 인력에 의해 데이터베이스가 노출되었을 경우에 대비하기 위해

사용자의 비밀번호를 암호화할 때는 단방향 해시 함수가 쓰임

단방향 해시 함수는 복호화할 목적으로 저장하지 않고, 온전히 본래의 비밀번호 값을 알지 못하도록 방지하는데에 목적이 있다.

파이썬에서는 단방향 해시 함수를 구하는 모듈을 제공함

import hashlib
m = hashlib.sha256() #sha256 암호 알고리즘을 선택함
m.update(b"test password") #암호화하고자 하는 값을 인자로 설정해서 update메소드를 호출. update 메소드는 바이트 값을 받으르모 bprefix를 스트링 앞에 붙여 바이트로 변환함
m.hexdigest() #암호화된 값을 hex(16진수)값으로 읽어들임

bcrypt 암호 알고리즘

단방향 해시 암호 알고리즘은 복호화를 할 수 있는 암호 알고리즘이 아니다.

상식적으로 생각하기에는 일단 암호화가 되면 원본 값을 절대 복구할 수 없을 것으로 생각함.

단방향 해시 암호 알고리즘 해킹방법이 있다! rainbow attack

profile
재밌는게 재밌는거다

0개의 댓글