Authentication 웹 인증이란?

블로그 글들을 실수로 모두 날려먹고, 멘탈 바사삭 되버린 이후에 새로 블로그를 다시 할 생각이 약간씩 들기 시작하다가, 마치 시험기간에 공부 할 내용이 많지만, 딴 짓 하는 수험생처럼 해야 할 일은 많지만, 약간의 시간을 할애하여 블로그를 새로 만들었다

웹인증에 대한 이야기를 풀어보고자 했는데, 가장 처음에 무엇부터 말해야 할지 고르기가 힘들었다. 다행히 이전에 사내 발표를 했던 자료를 가지고 정리를 시작해본다

우선 인증(Authentication)인가(Authorization)에 대한 구분부터 명확히 해야한다

authentication vs authorization 차이

인증 Authentication

  • 누구인가? (Login + Password)  (대충 궁예 짤)
  • 누군가가 실제로 자신이 주장하는 사람임을 확인하는 과정
  • 우리가 흔히 아는 로그인이 인증 행위

인가 Authorization

  • 당신(you)이 무엇을 할 수 있나? (Permission)
  • 누가 무엇을 할 수 있는지 결정하는 규칙을 의미
  • 예) 철수는 데이터베이스를 만들고 삭제할 수 있는 권한이 있을 수 있지만 영희는 읽기 권한만 가지고 있다
  • 주의) 철수와 영희가 누구인지는 밝히지 않는다 (인증 X)  단지 권한(Permission)만 체크

WEB Authentication

웹 인증을 이야기 하려면  HTTP 를 먼저 말해야 한다

HTTP의 특징 중의 하나는 비연결성(Connectionless)비상태성(Stateless)이다

모든 요청(Request)마다 연결과 해제의 과정을 거치면서, 연결 상태를 유지 하지 않고, 연결 해제 후에도 상태 정보를 저장하지 않는다
- 이것은 서버 자원을 크게 절약한다 -

흔히들 사용하는 쿠키(cookie)와 세션(session)은 HTTP 프로토콜의 특징이자 약점을 보완하기 위해 사용한다

HTTP 프로토콜 환경에서는 연결도 없고, 상태도 없기 때문에 어느 누가 요청을 보냈는지 모르기 때문에 서버(Server)는 클라이언트(Client)가 누구인지 확인 해야만 한다. 그래야 무엇인가 그에 알맞은 행동을 할 수 있는 것이니까!!

물론 요구사항에 따라 인증 없는 서버들
예를 들면 시간(time) 서버, DNS 서버 등등은 따로 인증을 하고 있지 않다
**(인증을 하는 서버도 존재한다)

예전에 사용하는 인증 방식은 서버(세션) 기반 인증 이고, 요즘이야 흔히들 JWT 라고 부르는 JSON Web Token처럼 토큰 기반 인증 방식이 많이들 알려져 있다
(요즘도 소규모에서는 사용 할 것이다 - 개발이 간편할테니)

서버 (세션) 기반 인증 Session-based authentication

  • 서버 측에 사용자의 정보를 기억/저장 - 세션을 유지한다
  • 메모리나 디스크 또는 데이터베이스 등을 통해 관리한다
  • 클라이언트로부터 요청을 받으면, 클라이언트의 상태를 계속해서 유지하고 이 정보를 서비스에 이용하는데, 이러한 서버를 Sateful 서버라고 한다
  • 서버가 늘어나게 되면 세션 공유에 대해서 문제점이 발생한다
  • 분산 처리 개발에 대한 요구사항이 필수로 생겨나게 된다
  • 지금도 분산 처리는 대단히 어렵고 복잡한 과정인데, 하물며 예전에는???
  • CORS 에서 자유롭지 못하다. cookie 에 등록된 도메인 한정
서버(세션) 기반 인증 Flow
예를 들어 설명하면, 아이디/비밀번호 넣고 로그인 하는데 HTTP 패킷을 열어보니 헤더에 토큰이 없이 로그인 되는 것이라면 대부분 세션 기반 인증 이라고 생각하면 된다

토큰 기반 인증 Token-based authentication

  • 인증 할 때 토큰이라는 문자열을 만들어서 전달(토큰 발급)하고, 서버에 요청할 때 Http Header에 해당 토큰을 같이 보내는 과정
  • 상태를 유지하지 않으므로 Stateless한 구조
  • 이 말은 사용자의 로그인에 신경쓰지 않고 손쉽게 시스템을 확장할 수 있다 (토큰만 올바르면 인증 성공이니까)
  • 이로서 무상태성(Stateless) & (시스템) 확장성(Scalability) & 보안성 (Security) & (토큰) 확장성 (Extensibility)
  • CORS 에 대응 할 수 있고, 여러 플랫폼과 디바이스에도 대응이 편하다
토큰 기반 인증 Flow

대충 기초 설명은 다 한 것 같고, 본격적으로 설명을 들어가보자

References

Authentication - Wikipedia
Authorization - Wikipedia
Session vs Token Based Authentication
Why do we need session or token for authentication?