인증 방식과 프로세스 비교

bp.chys·2020년 5월 19일
0

인증 프로세스

  • 시퀀스 다이어그램

  1. 유저가 계정과 비밀번호로 로그인을 시도
  2. (서버에서 패스워드 확인 등으로) 인증이 완료되면 클라이언트로 accessToken을 발급
  3. 이후 요청 시마다 해당 accessToken을 사용하여 인증 절차 생략

인증 authentication

  • 방문자가 자신이 회사 건물에 들어갈 수 있는지 확인받는 과정
  • 인증된 유저인지 아닌지를 확인하는 작업
  • 인증되지 않으면 401 status code를 내려보낸다.

인가 authorization

  • (인증된) 방문자가 회사 건물에 방문했을 때, 허가된 공간에만 접근 가능하다.
  • 특정 서비스, 페이지에 접근 권한을 부여하는 것을 의미한다.
  • 'JWT'를 쓰면 인가가 수월함. 서버가 유저 정보를 갖고 있으므로 데이터에서 유저의 권한 정보도 읽어들이면 됨.
  • 인가되지 않으면 403 status code를 내려보낸다.

인증 방식

1. Session/Cookie

  • Session/Cookie 방식은 가장 기본적이면서 전통적인 방식이다.
  • 사용자의 정보를 서버(세션저장소)에 세션이라고 불리는 사용자의 정보를 저장한다. (statueful)
  • 클라이언트에게는 Session ID를 발급하고 클라이언트는 이 정보를 쿠키에 저장한다.
  • 이제 매 요청마다 이 Session ID를 함께 보내고, 서버는 세션저장소에서 유저 인증을 수행한다.
    • 인증이 성공하면 요청을 핸들러로 보낸다.
    • 인증이 실패하면 응답으로 예외를 반환한다.
  • Session ID와 같은 인증 기록은 서버 및 클라이언트 측 모두에 유지된다. 주요한 정보가 다 서버 쪽에 남을 수 있다는 것이 큰 장점이기도 하지만, 요청때마다 매번 세션 저장소에 접근하여 확인해야 한다는 것이 단점이 될 수도 있는 방식이다.

cookie란?

stateless한 HTTP 프로토콜 특성 때문에 유저의 정보를 유지할 수 없는 한계를 극복하기 위해 나온 웹 브라우저에 존재하는 작은 텍스트 파일이다. 이 파일은 브라우저가 관리하게 되고 일반적으로 쿠키에는 만료일이 있다. 브라우저는 쿠키를 통해 접속자의 장치를 인식하고, 접속자의 설정과 과거 이용내역에 대한 일부 데이터를 저장한다. key-value 형식으로 저장된다.

2. Basic HTTP Authentication

  • HTTP는 다른 인증 프로토콜에 맞추어 확장할 수 있는 Authorization 제어 헤더를 제공한다.
  • HTTP Authorization 헤더는 서버의 사용자 에이전트임을 증명하는 자격을 포함하여, 보통 서버에서 401 Unauthorized 상태를 WWW-Authenticate 헤더로 먼저 알려준다.
  • 클라이언트는 username과 password 값을 :(콜론)으로 합친 뒤, 통채로 Base64 인코딩을 통해 credentials 생성하여 서버로 보낸다.
  • 서버는 credentials 값을 Base64로 디코딩하여 username과 password를 분리하여 인증한다.

주의할 점은 Base64 인코딩은 암호화나 해싱을 의미하는 것이 아니다. 이 방법은 인증에 대해서 문자를 그대로 보내는 것과 동일하다고 할 수 있기 때문에 반드시 https를 사용해야 한다. 인코딩을 해서 암호처럼 보이지만, 인코딩 디코딩 방식이 정해져있기 때문에 어느 누가 중간에 통신을 탈취하여 해킹할 위험이 존재하는 것이 단점이다.

3. Bearer HTTP Authentication

  • 로그인 시 서버로부터 token을 발급받고, 이후 요청 시 Authentication 헤더에 토큰을 실어 보낸다.
  • token을 만들 때 JWT 방식으로 생성하는 것이 특징이다.
  • 세션 정보가 클라이언트/서버 각각의 저장소에 흩어져있지 않고, 토큰 자체에 내장되어 있다.
  • 무상태 HTTP를 유지할 수 있기 때문에 속도도 빠르고 보안도 뛰어나다고 할 수 있다.

Session/Cookie vs Token

  • Session/Cookie방식은 sessionId를 매번 세션 저장소에서 찾아야 하는 번거로움이 있지만, token은 해독하여 유효성만 검증하면 된다.
  • 여기서 유효성이란 토큰의 만료기간, 토큰 안의 세션정보 등을 확인할 수 있다.

참고 자료

REST Assured Authentication
HTTP 인증

profile
하루에 한걸음씩, 꾸준히

0개의 댓글