[Django]인증, 인가

김예진·2020년 10월 25일
0

Django

목록 보기
4/10
post-thumbnail

1. 인증(Authentication)

  • Authentication은 유저의 아이디와 비밀번호를 확인하는 절차.
  • 인증을 하기 위해선 먼저 유저의 아이디와 비번을 생성하는 기능이 필요하다.

1) 로그인 절차

(1) 유저 아이디와 비번 생성
(2) 유저 비번을 암호화해서 데이터 베이스에 저장
(3) 유저가 로그인할 때 아이디와 비밀번호를 입력
(4) 유저가 입력한 비밀번호를 암호화한 뒤 데이터베이스에 저장된 유저 비밀번호(암호화되어있는)와 비교
(5) 일치하면 로그인 성공
(6) 로그인 성공시 access token을 클라이언트에게 전송

access token : 접근 권한이 있는 값.
브라우저에서는 '상태'를 관리하지 않는다.
다시 말해서, 우리가 사용하는 http 통신은 stateless로 client의 이전 상태를 기록하지 않는다. 때문에 access token으로 로그인 유무를 확인한다.

(7) 로그인 성공 이후에는 access token을 첨부해서 request를 서버에 전송함으로서 매번 로그인해도 되지 않도록 함.


2) 유저 비밀번호 암호화

  • 유저의 비밀번호는 비밀번호 그대로 저장하는거 절대 ❌❌❌
  • 유저의 비밀번호는 반드시 암호화해서 저장해야함.
  • 비밀번호 암호는 일반적으로 단방향 해쉬 함수(one-way hash function)가 일반적으로 사용됨.

  • 단방향 해쉬 함수도 몇 가지 취약점이 있는데 이 취약점을 보완하기 위해 Salting과 Key Stretching을 사용한다.
    👉🏻 Salting과 Key Stretching을 구현한 해쉬 함수 중 가장 널리 사용되는 게 bcrypt.


2. 인가(Authorization)

  • Authorization은 유저가 요청하는 request를 실행할 수 있는 권한을 가진 유저인지 확인하는 절차다.
  • 예로 들면, 로그인해야 프로필 페이지를 볼 수 있다던가, 로그인 해야만 게시글 작성이 가능하거나,
    해당 유저는 고객 정보를 볼 수 있지만 수정은 불가능하다는 등..

1) Authorization 절차

(1) Authentication 절차를 통해 access token을 생성. access token에는 유저 정보를 확인할 수 있는 정보가 들어있어야 한다.(유저의 id같은거)
(2) 유저가 request 보낼 때 access token을 같이 보냄
(3) 서버에서는 유저가 보낸 access token을 복호화해서 user id를 얻는다.
(4) user id를 사용해서 데이터베이스에서 해당 유저의 권한을 확인한다.
(5) 유저가 해당 권한을 가지고 있으면 요청을 처리, 권한을 가지고 있지 않으면 Unauthorized Response(401) 혹은 다른 에러 코드를 반환


profile
Backend Developer 🌱 벨로그 내용을 티스토리로 이사중~!

0개의 댓글