Authentication & Authorization

김한준·2021년 6월 28일
0

🚀 Authentication (인증)

유저의 identification을 확인하는 절차 (회원가입 & 로그인)

📍 비밀번호 암호화

  • 단방향 해쉬 함수 (One-way hash function)
  • 원본 메세지를 변환하여 암호화된 다이제스트(digest)를 생성
  • 암호화된 메세지로부터 원본 메세지를 구할 수 없기 때문에 단방향성(one-way)

📍 단방향 해쉬 함수의 취약점을 보안하기 위한 2가지 방법

  • Salting: 실제 비밀번호 이외에 추가적으로 랜덤 데이터를 더해서 해쉬값을 계산하는 방법

  • Key-Stretching: 해쉬를 반복하는 것. 단방향 해쉬값을 계산 후 그 해쉬값을 다시 해쉬하고 다시 해쉬하는 방법

📍 Bcrypt: Salting & Key Stretching 대표적 라이브러리

📍 JWT (JSON Web Tokens): 유저 정보를 담은 JSON 데이터를 암호화해서 클라이언트와 서버간에 주고 받는것

  • 헤더에는 토큰의 타입과 해쉬알고리즘 정보가 들어감
  • 내용에는 exp와 같은 만료시간을 공개

🚀Authorization (인가)

유저가 요청하는 request를 실행할 수 있는 권한이 있는지 확인하는 절차

access_token을 통해 권한을 확인 할 수 있다

📍 Authorization step

  1. Authentication 절차를 통해 access token을 생성한다. access token에는 유저 정보를 확인할 수 있는 정보가 들어가 있어야 한다 (예를 들어 user id).
  2. 유저가 request를 보낼때 access token을 첨부해서 보낸다.
  3. 서버에서는 유저가 보낸 access token을 복호화 한다.
  4. 복호화된 데이터를 통해 user id를 얻는다.
  5. user id를 사용해서 database에서 해당 유저의 권한(permission)을 확인하다.
  6. 유저가 충분한 권한을 가지고 있으면 해당 요청을 처리한다.
  7. 유저가 권한을 가지고 있지 않으면 Unauthorized Response(401) 혹은 다른 에러 코드를 보낸다.

0개의 댓글