728x90

Authentication(인증)과 Authorization(인가)

 

누가, 언제, 어떻게 쓰고 있는가를 파악하기 위해 어떤 웹사이트든 Authentication(인증)Authorization(인가)가 있다. 

 

Authentication(인증)

  • 유저가 누구인지 확인하는 절차
  • 클라이언트가 자신이 주장하는 사용자와 같은 사용자인지를 확인하는 과정
  • 방문자가 자신이 회사 건물에 들어갈 수 있는지 확인받는 과정
  • ex) 회원가입, 로그인
  • 필요 이유: 서비스를 누가 사용하는지 추적이 가능하도록 하기 위해서. 타인에게 사용자의 정보를 보호하기 위해서. 

 

Authorization(인가)

  • 권한 부여
  • 클라이언트가 하고자 하는 작업이 해당 클라이언트에게 허가된 작업인지를 확인
  • 특정 자원에 대한 접근 권한이 있는지 확인하는 절차
  • 유저에 대한 권한을 허락하는 것
  • 방문자가 회사 건물에 방문했을 때, 허가된 공간에만 접근 가능

 

웹 인증(Authentication)

 

웹에서 인증을 요청하는 유저는 서버에게 두 가지 정보를 제시한다. 

  • 아이디 : 나는 '누구'이다. 
  • 비밀번호 : 내가 그 유저인 '증거'이다. 

 

HTTP 요청 방식

서버에 유저 정보를 보내서 사용 허가를 받는다. 

 

HTTP의 특징은 Request(요청)와 Response(응답)이다.

 

하지만, 이 방식에는 문제가 있다. 

 

통신을 서로 주고 받지만, 클라이언트와 서버가 서로 연결되어 있는 것은 아니기 때문에 

각각의 통신은 독립적이다. 

 

그리고, 한 번 요청과 응답이 완료되면 저장되지 않는 stateless 성질이 있다.

즉, 한 번 요청과 응답이 끝나면 상태 정보를 유지하지 않는다. 

 

그래서 다른 페이지로 넘어가면 정보가 없으므로, 인증 절차가 필요하다. 

 

HTTP 요청 인증 방식(쿠키, 세션, 토큰인증기반)

쿠키(Cookie)

  • 쿠키는 클라이언트(유저의 컴퓨터)에 저장되는 텍스트 형식의 데이터
  • 쿠키는 방문한 웹사이트에서 생성된 파일로, 인터넷 사용정보를 저장
  • 쿠키에는 사용자 인증이 유효한 시간을 명시할 수 있음
  • 한 번 유효 시간이 정해지면, 브라우저를 끄더라도 인증이 유지됨
  • ex) 방문 사이트에서 로그인 시, '아이디와 비밀번호를 저장하시겠습니까?'
  • ex) 쇼핑몰의 장바구니 기능

 

세션(Session)

  • 세션은 쿠키를 기반으로 함
  • 사용자 정보 파일을 브라우저에 저장하는 쿠키와 달리, 세션은 서버에서 관리
  • 세션 ID를 부여하며 웹 브라우저가 서버에 접속해서 브라우저를 종료할 때까지 인증상태를 유지함
  • 사용자에 대한 정보를 서버가 저장하기 때문에, 쿠키보다 보안에 좋지만, 사용자가 많아질수록 서버 메모리를 많이 차지하게 된다. 그래서 동접자 수가 많은 웹사이트의 경우 서버에 과부하를 주게 되므로 성능 저하의 요인이 된다. 

 

쿠키와 세션의 차이

  • 가장 큰 차이는 사용자의 기록 정보가 저장되는 위치
  • 쿠키는 서버의 자원을 전혀 사용하지 않고, 세션은 서버의 자원을 사용한다. 
  • 세션은 사용자 수만큼 서버 메모리를 차지하기 때문에, 요즘은 이런 문제를 보완한 토큰 기반의 인증 방식(JWT)을 사용하는 추세이다. 

 

토큰인증기반(JWT, Json Web Token)

  • JSON 데이터 구조로 표현한 토큰이다.
  • 서버에 정보를 보내고 결과를 JSON 형태 토큰으로 받는다. 
aaaaaa.bbbbbb.cccccc
헤더(header).내용(payload).서명(signature)

 

[JWT process]

이미지 참조) https://www.vaadata.com/blog/jwt-tokens-and-security-working-principles-and-use-cases/

 

 

728x90

'CS > 네트워크' 카테고리의 다른 글

JWT - JSON Web Token  (0) 2021.06.04
JWT - 토큰 기반 인증  (1) 2021.06.04
알아두면 좋은 HTTP X 헤더  (0) 2021.05.28
알아두면 좋은 HTTP 쿠키, 캐시 헤더  (0) 2021.05.28
알아두면 좋은 HTTP 응답 헤더  (0) 2021.05.28

+ Recent posts