인증 방식과 프로세스 비교

bp.chys·2020년 5월 19일
0

인증 프로세스

  • 시퀀스 다이어그램

authentication se

  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개의 댓글