[OAuth] OAuth 101


이번 글에서는 회원시스템 구축에 필수적 요소라 할 수 있는 OAuth에 대해서 알아보고자 한다.

OAuth

OAuth 2.0

OAuth를 생각하면 예전, 학교 프로젝트를 진행하며, 그리고 쇼핑몰을 구축해서 Facebook과 연동하며, Facebook OAuth를 써 본 기억이 난다. OAuth를 알기전에 알아야 할 것 들이 우선 몇가지 있다.

  • Http 통신 과정
  • Authentication/Authorization에 대한 이해

Http 통신 과정

HTTP란 인터넷상에서 데이터를 주고 받기위한 서버/클라이언트 모델을 따르는 프로토콜이다. 이러한 HTTP는 TCP/IP를 베이스로해서 이뤄지며, 이러한 자세한 네트워킹 과정은 추후에 다뤄보도록 하겠다. OAuth를 알기위해 우선 알아야할 것은 HTTP 통신에서 Redirect에 대한 것이다. HTTP Status code에서 3xx 대에 속한 이 Redirection은 말 그대로, 리다이렉트를 시키므로써, 웹페이지를 자동 이동시키게 된다.

밑의 테이블이 HTTP 3xx 에 해당하는 Status Code이다.

HTTP Status CodeHTTP VersionTemporary / PermanentCacheableRequest Method Subsequent Request
301HTTP/1.0PermanentyesGET / POST may change
302HTTP/1.0Temporarynot by defaultGET / POST may change
303HTTP/1.1Temporaryneveralways GET
307HTTP/1.1Temporarynot by defaultmay not change
308HTTP/1.1Permanentby defaultmay not change


reference url : https://en.wikipedia.org/wiki/URL_redirection

이러한 통신 코드 및 리다이렉션에 알고나서, OAuth를 더 알아보자.

Authentication/Authorization에 대한 이해

  • Authentication
    • 인증, 특정 사용자라는 것을 인증하는 것을 의미한다.
  • Authorization
    • 권한부여(허가), 특정 사용자의 권한을 어디까지 획득할 수 있는지를 의미한다.

왜 이러한 의미의 차이를 짚고 넘어가느냐하면, OAuth는 Authorization 즉, 권한에로의 의미가 강하기 때문이다. 특정 사용자를 인증하는 것을 넘어서, 어느정도의 권한을 획득할 수 있느냐를 다루는 것이기에 용어의 미세한 차이점을 자각하고 있어야하겠다.

OAuth

밑의 사진을 먼저 보고 내용을 이어가자.

OAuth Process



OAuth Process

위의 그림을 보면, 사용자가 특정 서비스에 접속해서, 인증 및 권한 획득을 요청할 때, 웹서버(APP)는 PAYCO와 같은 Authorization Server로의 리다이렉트를 브라우저에게 반환하게 된다.

브라우저는 해당 웹서버의 클라이언트 id값을 가지고서, Authorization Server에 가서, 로그인 페이지를 응답받게 되고, 사용자는 ID/PW를 입력하여, Authorization Server에 로그인 하게 된다.

해당 사용자의 인증이 완료되면, 권한획득 서버는 App서버로의 리다이렉트를 반환하며, App서버에서는 다시, Client ID와 Secret, 그리고 Random String 및 Code등을 Authorizatio서버로 요청하여, Access Token값을 받아오게 된다.

App서버는 이러한 Access Token값을 바탕으로 유저에게 서비스해줄 정보(예를들면 프로필 사진등의 기본프로필, 친구목록 등)를 Authorization서버 및 Rsc server에게 요청하게 되고 반환 받은 값을 적절히 처리후, 사용자에게 렌더링하게 된다.

reference url : http://earlybird.kr/1584 reference url : http://www.slideshare.net/tebica/oauth-api-13721761