[OAuth] OAuth 101
in Devstory on Dictionary, Oauth, Authentication, Authorization
이번 글에서는 회원시스템 구축에 필수적 요소라 할 수 있는 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 Code | HTTP Version | Temporary / Permanent | Cacheable | Request Method Subsequent Request |
---|---|---|---|---|
301 | HTTP/1.0 | Permanent | yes | GET / POST may change |
302 | HTTP/1.0 | Temporary | not by default | GET / POST may change |
303 | HTTP/1.1 | Temporary | never | always GET |
307 | HTTP/1.1 | Temporary | not by default | may not change |
308 | HTTP/1.1 | Permanent | by default | may not change |
reference url : https://en.wikipedia.org/wiki/URL_redirection
이러한 통신 코드 및 리다이렉션에 알고나서, OAuth를 더 알아보자.
Authentication/Authorization에 대한 이해
- Authentication
- 인증, 특정 사용자라는 것을 인증하는 것을 의미한다.
- Authorization
- 권한부여(허가), 특정 사용자의 권한을 어디까지 획득할 수 있는지를 의미한다.
왜 이러한 의미의 차이를 짚고 넘어가느냐하면, OAuth는 Authorization 즉, 권한에로의 의미가 강하기 때문이다. 특정 사용자를 인증하는 것을 넘어서, 어느정도의 권한을 획득할 수 있느냐를 다루는 것이기에 용어의 미세한 차이점을 자각하고 있어야하겠다.
OAuth
밑의 사진을 먼저 보고 내용을 이어가자.
위의 그림을 보면, 사용자가 특정 서비스에 접속해서, 인증 및 권한 획득을 요청할 때, 웹서버(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