본문 바로가기
wecode/TIL 정리

위코드 Foundation - 인증과 인가

by 왕거 2020. 8. 11.

인증과 인가

  • 인증과 인가는 API에서 가장 자주 구현하는 기능이다.
  • Private한 API는 물론이고, Public한 API에서도 기본적인 인증과 인가 과정을 요구

 

인증(Authentication)

  • 인증이란 사용자의 Identification을 확인하는 일련의 절차
  • 로그인 절차가 인증과정에 해당된다.
    1. 유저의 아이디와 비밀번호를 만든다.
    2. 만든 아이디와 비밀번호를 DB에 저장하는데 이때 비밀번호의 경우 암호화를 진행한 후 저장한다.
    3. 이후 유저가 로그인을 위해서 아이디와 비밀번호를 입력한다.
    4. 입력된 아이디와 비밀번호를 DB에 저장된 데이터와 비교, 이때에도 입력받은 비밀번호는 암호화 후 비교
    5. 일치하면 로그인 성공으로 판단
    6. 클라이언트로 Access Token을 전달
    7. 유저는 로그인에 성공한 이후에는 Access Token을 첨부하여 Request를 사용하도록 함으로써 로그인을 매번 진행 할 필요가 없도록 할 수 있다.
  • 암호화(Encryption)
    • 일반적인 데이터(평문)을 일련의 알고리즘을 거쳐서 특정한 사용자만 읽을 수 있도록 하는 절차
    • 비밀번호나 중요한 개인정보들은 암호화를 진행한 결과를 DB에 저장하도록 법으로 강제되고 있다.

Bcrypt

  • Bcrypt는 단방향 해시 함수를 기반으로 알려져 있는 단방향 해시 함수의 단점을 보완한 암호화 방법
    • 단방향 해시 함수는 기반이 암호화를 위한 함수가 아닌 검색을 위한 함수로 만들어졌다.
    • 미리 해시 함수의 결과값을 모아놓은 테이블을 사용하는 공격인 Rainbow Table Attack에 굉장히 취약하다.
  • Salting과 Key Stretching을 통해서 단점을 보완함
    • Salting  -  암호화 할 데이터에 임의의 데이터를 추가하여 해시 값을 계산해내는 방법
    • Key Stretching  -  1회로 해시 계산을 끝내는 것이 아닌 여러 횟수를 반복하는 방법
  • 단방향 해시 함수의 단점을 보완하기 위한 여러 함수중 하나가 Bcrypt
  • 만들어진 목적부터 암호화를 목적으로 만들어졌다.

Bcrypt

 

JWT(JSON Web Token)

  • 먼저 언급한 로그인 성공시에 발행하는 Access Token을 만들어내는 여러 방법 중 하나로 널리 사용되는 기술
  • Access Token은 기본적으로 암호화된 데이터이며, 서버에서는 이에 대해서 복호화를 진행하여 어떤 사용자가 Request를 진행한 것인지 파악할 수 있다.
  • JWT 기술의 경우, 사용자의 정보를 JSON 포맷에 맞춰 암호화를 진행해서 서버와 클라이언트 간에 주고받는다.

JWT Working Process

  • Access Token을 사용하는 이유
    • 간단한 해시 함수를 통해서 성능을 확보할 수 있다.
    • 클라이언트의 쿠키 같은 곳에 사용자의 실제 아이디 및 비밀번호를 저장할 필요가 없다.  -> 그대로 저장한다면 꽤 위험한 보안 이슈로 작용할 것 같다.
    • Access Token은 서버에서만 사용된다.

 

인가(Authorization)

  • 인가란 사용자가 요청한 Request에 대해서 실행할 권한이 있는 사용자인지를 확인하는 절차
  • 인가 과정을 JWT를 사용해서 처리할 수 있다.
  • 기본적인 인가 절차
    1. 인증 절차를 통해서 Access Token을 생성한다. 이때 생성하는 Access Token에는 사용자를 특정할 수 있는 정보가 포함되어야 한다.
    2. 사용자가 Request를 보낼 때 Token을 첨부해서 보낸다.
    3. 서버에는 사용자가 보낸 Token을 복호화한 후, 사용자 특정 정보를 취득한 후에 DB에서 해당 사용자의 권한을 확인한다.
    4. 사용자의 권한이 충분하다면 Request를 수행
    5. 사용자의 권한이 충분하지 않다면, Unauthorized Response - Code 401 또는 다른 에러 코드로 반응한다.