서버가 클라이언트를 식별하는 방법 HTTP는 기본적으로 stateless다. HTTP 요청에 포함되는 정보들은 현재 요청을 처리하기 위한 정보들만을 제공할 뿐, 그 이전 또는 이후의 요청에 대한 정보는 제공하지 않는다. 그러나 이러한 정보만으로는 적절한 응답을 내려주기 어려운 요청들이 있다. 대표적인 예시로 사용자의 인증(로그인된 사용자인가?) 여부에 따라 허용을 달리하는 API로의 요청이 있다. 이러한 API를 호출하기 위해, 통상적으로 두 가지 방법이 사용된다. 하나는 서버가 부가적인 정보를 소유하는 세션 방법이고, 다른 하나는 클라이언트가 부가적인 정보를 소유하는 토큰 방법이다. 두 가지 모두 활발하게 사용되고 있고, 나름의 장단점을 가진다. 본 글에서는 두 가지의 특징을 분석하고 어떤 상황에서 어..
HTTP (HyperText Transfer Protocol) 정의 하이퍼텍스트(HyperText)를 주고받기 위해 사용되는 프로토콜 하이퍼텍스트란, 한 문서에서 다른 문서로 접근할 수 있는 텍스트(현대에는 이를 주로 하이퍼링크라고 부름)이다. 문제점 HTTP만을 이용하여 통신하면 데이터를 평문으로 주고받기 때문에 누군가가 이를 가로채 데이터 유출이 일어날 수 있다. 이러한 보안 취약점을 해결하기 위해 도입된 것이 HTTPS 프로토콜이다. HTTPS (HyperText Transfer Protocol Secure Socket) 정의 기본 형식이나 사용 목적은 HTTP와 유사하지만, HTTP의 보안 취약점 해결을 위해 데이터를 암호화하여 주고받는다. HTTPS는 암호화를 위해 대칭키 암호화 방식과 공개키 ..
정의 사용자들이 제3자 서비스의 계정을 통해 인증을 수행할 수 있도록 접근 위임을 제공하는 공통 표준(open standard) 인증방식 여기서 제3자 서비스란 Google, Facebook, Github 등을 포함한다. 장점 (문제 해결) 기존에는 제3자 서비스의 계정을 이용하기 위해 본 서비스와 제3자 서비스에 모두 사용자의 아이디/비밀번호를 제공해야 했으며, 이는 사용자 입장에서는 보안 취약점으로 다가왔다. (하나 털리면 다 털림!) Auth를 이용하면 사용자가 입력한 사용자의 개인 정보가 아닌 임의로 생성되는 값인 accessToken을 이용해 인증을 수행하기 때문에, 두 개 서비스 모두에 개인 정보를 제공할 필요가 없다. 기존에는 제3자 서비스의 아이디/비밀번호를 제공하는 형식에서는 본 서비스가..
등장 계기 기존에는 쿠키-세션 방식을 통해 사용자 인증을 수행하였다. 이 방법은 서버가 사용자를 식별하기 위해 사용자의 정보를 서버에 저장하고 있어야 했고, 이는 다음의 문제를 발생시켰다. 모든 사용자의 정보를 저장해야 하기 때문에 서버에 부하를 일으킨다. 서버를 확장하기 어려워진다. 서버가 여러 대가 되면 세션 정보를 공유해야 하는데, 이 과정이 복잡하기 때문 따라서 Stateful 방식으로 사용자 정보를 관리하는 것에 어려움을 느끼게 되었고, 이에 대한 대안으로 등장한 Stateless 방식의 인증 기법이 바로 Token을 이용한 인증 기법이다. JWT(JSON Web Token) 토큰 중에서도 JSON 형식의 데이터를 이용하는 토큰 JWT Format JWT는 3개의 요소인 Header, Paylo..
Cookie HTTP 프로토콜은 비연결성, 무상태성이라는 특징 때문에 그 자체만으로는 사용자를 식별할 수 없다. 따라서 인증이 필요한 경우 서버가 클라이언트(브라우저)에 데이터를 저장하는 방식을 이용하는데, 이 데이터를 Cookie(쿠키)라고 부른다. 그러나 Cookie는 도난당하기 쉬우며, 암호화되지 않은 정보를 저장하기 때문에 그 내용 또한 확인하기 쉽다는 문제가 있다. Cookie & Session 따라서 Cookie의 보안 취약점을 해결하기 위해 Session과 함께 사용한다. Cookie에는 세션 ID라는 무의미한 임의의 문자열만을 저장하고, 이 세션 ID를 통해 서버의 세션이라는 저장소에서 해당 사용자의 정보에 접근할 수 있도록 하는 것이다. 이를 통해 사용자의 정보를 보호할 수는 있게 되었으..
Passport란 무엇인가? Simple, unobtrusive authentication for Node.js 즉, node로 개발된 서버를 위한 인증 라이브러리이다. Passport는 다양한 인증 방식을 전략(Strategy)이라는 이름으로 제공한다. Passport는 말그대로 복잡한 인증 과정에서 복잡한 부분은 라이브러리에게 맡기고 개발자는 핵심 로직에 집중할 수 있도록 하기 위해 사용한다. 그러나 개발자는 이 복잡한 부분이 어떻게 수행되는지 정도는 알고 있어야 한다. 이 포스팅에서는 서버에서 직접 아이디와 비밀번호를 받아 처리하는 passport-local 방식을 이용해본다. passport-local passport-local은 사용자가 직접 입력한 아이디와 비밀번호로 인증을 수행한다. pass..