Authentication & Authorization

-·2022년 10월 12일
0
post-thumbnail

1. 인증과 인가

1) 인증이란?

인증은 문자 의미 그대로 해당 사용자가 맞는지 또는 해당 시스템이 맞는지를 결정하는 과정으로, 인증 기술은 사용자의 자격 증명 정보가 데이터 인증 서버상의 자격 증명 정보와 일치하는지를 확인하여 인증 절차를 통과한 시스템에 대해서만 액세스 제어를 제공한다.

2) 인가란?

인가는 인증 과정을 통해 자격이 증명된 사용자에게 특정 리소스나 기능에 대한 액세스 권한을 부여하는 프로세스로, 서버의 특정 파일을 다운로드 할 수 있는 권한을 부여하거나 또는 애플리케이션에 대한 관리 액세스 권한을 제공하는 것이 인가에 해당한다.

2. 세션과 쿠키

1) 세션

사용자가 브라우저를 통해 웹 서버에 접속한 시점으로부터 브자우저를 종료하여 연결을 끝내는 시점 동안에 들어오는 요청들을 하나의 상태로 보고, 그 상태를 일정하게 유지시켜 사용자와 웹서버가 연결된 상태를 뜻한다.

2) 쿠키

사용자의 컴퓨터에 저장되는 데이터 파일로 이름, 값, 만료 날짜 및 시간, 경로 정보 등으로 구성되어 있다.
서버에서는 HTTP Response Header에 Set-Cookie 속성을 통해 사용자에게 쿠키를 전달하여 사용자가 이를 저장하게 하고, 사용자는 HTTP 요청 시 저장 된 쿠키를 함께 전달하여 서버에서 이를 통해 이전 통신에 사용된 정보들을 파악할 수 있다.

  • 사용자가 로그인을 하기 위해 인증 정보를 가지고 인증 과정을 요청한다.
  • 인증이 완료 되면 사용자의 세션 정보를 서버의 메모리에 저장 후 해당 세션을 식별할 수 있는 Session ID 발급한다.
  • 발급한 세션 ID가 쿠키에 저장 될 수 있도록 HTTP Response Header의 Set-Cookie 속성을 이용하여 사용자에게 전달한다.
    -전달받은 세션 ID는 브라우저의 쿠키에 저장 되고, Request를 서버에 보낼 때 함께 전달된다.
  • 서버는 사용자가 보낸 세션 ID 와 서버 메모리에서 관리하고 있는 세션 ID를 비교하여 Verification을 수행 후 권한을 인가한다.

3) 세션 기반 인증의 장단점

◼︎ 장점

  • 세션 아이디 자체에는 중요한 개인 정보를 담고 있지 않으며 서버에서 정보를 관리하기 때문에 데이터 손상에 대해 상대적으로 안전하다.
  • 서버에서 상태를 유지하고 있으므로 사용자의 로그인 여부 확인이 쉽고 경우에 따라서 강제 로그아웃 등의 제재를 가할 수 있다.

◼︎ 단점

  • 서버에서 모든 사용자의 상태를 관리해야 하므로 갑작스럽게 사용자 수가 증가하면 서버에 가해지는 부하가 증가하므로 서버 다운이 일어날 수 있다. 또한 이를 해결하기 위해 서버의 스케일 아웃을 해야할 때 세션 관리가 어려워진다.
  • 모바일 기기와 브라우저에서 공동 사용할 때 중복 로그인 처리가 되지 않는 문제 등 신경 써줘야 할 부분들이 증가한다.

3. 토큰(Token)

1) 토큰이란?

지금은 잘 사용하지 않는 말이지만 예전엔 지하철이나 버스를 탈 때 토큰이라는 종이표를 가지고 탑승하였다. (아직 일부 지역에서는 토큰을 사용하는 것으로 알고 있다.) 웹에서도 토큰을 가지고 있으면 특정 서비스를 이용할 권리가 있다고 생각할 수 있다. 즉, 토큰은 제한된 리소스에 대해 일정 기간 동안 접근할 수 있는 권한을 캡슐화 한것으로, 사용자에게 의미를 알 수 없는 임의의 문자열 형태로 발급한다

  • 사용자가 로그인을 하기 위해 인증 정보를 가지고 인증 과정을 요청한다.
  • 인증이 완료 되면 서버의 메모리 상에 세션을 저장하는 대신에 사용자의 식별 정보를 가지고 있는 토큰을 발급해서 Response의 Body에 담아 사용자에게 전달한다.
  • 사용자는 발급된 토큰을 local storage에 저장하고, Request를 할 때마다 저장된 토큰을 Header 에 포함시켜 서버로 보낸다.
  • 서버는 사용자로부터 전달받은 Header의 토큰 정보를 Verification 한 뒤, 해당 유저에 권한을 인가한다.

2) 토큰 기반 인증의 장단점

◼︎ 장점

  • 서버상의 메모리에 저장되는 세션과 달리 토큰은 사용자의 local storage에 저장되므로 서버의 메모리나 DB 등에 부담이 없으므로 서버의 스케일 아웃에 용이하다.
  • 모바일과 브라우저의 멀티환경에서 사용이 용이하다.
  • 토큰의 만료 시간을 짧게 설정하여 안정성을 높일 수 있다.

◼︎ 단점

  • 서버상에 사용자의 상태를 저장하고 있지 않기 때문에 사용자의 로그인 여부 확인 또는 특별한 경우에 강제 로그아웃 등의 제재를 가하기 어렵다.
  • 사용자가 임의로 토큰을 수정하거나 구조가 변경되면 서버에서 확인 할 수가 없다. (사실 이럴 확률은 극히 매우 낮다.)
  • payload 부분에 사용자 식별을 위한 여러 정보들이 포함되어 있기에 세션 아이디의 길이보다 길어져서 HTTP request 전송 데이터의 크기가 증가한다.

0개의 댓글