서버가 클라이언트를 식별하는 방법 HTTP는 기본적으로 stateless다. HTTP 요청에 포함되는 정보들은 현재 요청을 처리하기 위한 정보들만을 제공할 뿐, 그 이전 또는 이후의 요청에 대한 정보는 제공하지 않는다. 그러나 이러한 정보만으로는 적절한 응답을 내려주기 어려운 요청들이 있다. 대표적인 예시로 사용자의 인증(로그인된 사용자인가?) 여부에 따라 허용을 달리하는 API로의 요청이 있다. 이러한 API를 호출하기 위해, 통상적으로 두 가지 방법이 사용된다. 하나는 서버가 부가적인 정보를 소유하는 세션 방법이고, 다른 하나는 클라이언트가 부가적인 정보를 소유하는 토큰 방법이다. 두 가지 모두 활발하게 사용되고 있고, 나름의 장단점을 가진다. 본 글에서는 두 가지의 특징을 분석하고 어떤 상황에서 어..
정의 사용자들이 제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를 통해 서버의 세션이라는 저장소에서 해당 사용자의 정보에 접근할 수 있도록 하는 것이다. 이를 통해 사용자의 정보를 보호할 수는 있게 되었으..