본문 바로가기
  • 그냥 하자
Web Programing

OAuth 인증방식의 이해 Ⅰ : 용어 정리 및 사용자 관점에서의 OAuth

by Mash 2011. 10. 27.
반응형

OAuth 인증방식의 이해

용어 정의
- 서비스 프로바이더(Service Provider) : API를 제공하는 서비스를 말한다.
- 사용자(Users) : 서비스 프로바이더 혹은 컨수머를 사용하는 이를 말한다.
- 컨수머(Consumer) : API를 사용하여 개발된 애플리케이션 서비스를 말한다.
- 보호된 자원(Protected Resources) : 서비스 프로바이더에 존재하는 사용자의 데이터를 의미한다.
- 컨수머 개발자(Consumer Developer) : 컨수머를 개발하는 개인 혹은 단체
- 컨수머 키(Consumer Key) : 서비스 프로바이더에게 컨수머 자신임을 인증하기 위한 키
- 컨수머 시크릿(Consumer Secret) : 컨수머의 컨수머 키 쇼유권한이 있는지 인증하기 위한 키
- 토큰(Tokens) : 컨수머에서 서비스 프로바이더에 있는 사용자의 보호된 자원에 접근하기 위해 사용되는 사용자                            의 인증 정보
     - 리퀘스트 토큰(Request Token) : 컨수머가 사용자에게 접근권한을 획득하는 과정에서 사용하는 값이며, 이
                                                      것은 차후 엑세스 토큰으로 교환된다.
     - 리퀘스트 토큰 시크릿(Request Token Secret) : 리퀘스트토큰이 사용자의 것임을 인증하기 위한 값이다.
     - 엑세스 토큰(Access Token) : 컨수머가 사용자의 서비스 프로바이더를 통해서가 아닌 컨수머를 통해서 보호
                                                  된 자원에 접근할 수 있는 권한을 받기 위한 값이다.
     - 엑세스 토큰 시크릿(Access Token Secret) : 엑세스토큰이 사용자의 것임을 인증하기 위한 값이다.


* 아래의 내용은 출처1을 번역한 내용이다. *
사용자 관점에서 본 OAuth 인증과정
 Oauth는 실제 예제로 잘 설명될 수 있다. OAuth 스펙에 있는 Appendix A와 유사한 예제이지만, 스펙에서는 HTTP 호출 문법에 초점을 맞춘 반면, 여기에서는 사용자, 컨수머, 그리고 서비스 프로바이더의 관점에서 OAuth세션을 중심으로 설명한다.


2주 동안 스코트랜드의 여행을 마치고 돌아온 Jane은 여행을 하며 찍은 사진들을 친구들과 공유하고 싶습니다. Jane은 여행 사진을 공유하기 위해 사진 공유사이트인 Faji를 사용 합니다. 그녀는 faji.com에 로그인하고 비공개로 설정한 두 장의 사진을 업로드 합니다.


OAuth에서 쓰이는 용어에 따르면 Jane은 사용자 이고 Faji는 서비스 프로바이더이다. Jane이 업로드한 2장의 사진은 보호된 데이터가 된다.


그녀의 몇몇 친구들과 사진을 공유한 다음, Jane은 그녀의 할머니와도 사진을 공유하려 합니다. 희귀한 스코트랜드의 병(bottle) 사진을 다름 사람들과 공유하고 싶지는 않지만, 할머니는 인터넷에 접속할 수 없기 때문에 Jane은 그 사진을 인쇄해서 할머니에게 보내려 합니다. 이를 위해 Jane은 Beppa라는 온라인 인쇄 서비스를 이용하려 합니다.


OAuth에서 쓰이는 용어에 따르면 Beppa는 컨수머 입니다. Jane이 사진을 비공개로 해 놓은 이상, Beppa가 그 사진을 인쇄하기 위해 사진을 얻기 위해서는 OAuth인증을 해야 한다.

beppa.com에 방문한 Jane은 인쇄 명령을 내립니다. Beppa는 Faji를 포함한 많은 외부의 사진공유 사이트들에 있는 사진들을 가져올 수 있는 기능을 지원합니다. Jane은 사진이 있는 곳의 서비스를 선택하고 continue버튼을 누릅니다.



Beppa가 Faji 사진을 가져올 수 있도록 지원하고자 한다면, Beppa 개발자는 Faji의 OAuth인증을 사용하는 API를 사용하기 위하여 Faji로 부터 컨수머 키(Consumer Key)와 컨수머 시크릿(Consumer Secret)을 사전에 받아와야 한다. Jane이 continue버튼을 누른 후 뒷단에서는 Beppa와 Faji사이에 중요한 일들이 일어난다. Beppa는 Faji에게 리퀘스트 토큰(Request Token)을 요청한다. 리퀘스트 토큰(Request Token)은 사용자와 전혀 상관이 없으며, Beppa가 Faji에 있는 Jane의 비공개 사진에 접근하는 것을 승인하기 위해 사용될 뿐이다.


Jane은 continue버튼을 누르고 화면이 바뀌길 기다립니다.


Beppa가 리퀘스트 토큰(Request Token)을 받으면, Faji의 OAuth 사용자 인증 URL로 방금 받은 리퀘스트 토큰(Request Token)과 함께 리다이렉트 시키고, Jane이 승인을 하면 http://beppa.com/order로 되돌아오게 할 것을 요청한다. Jane은 Faji로 리다이렉트되고 사이트에 로그인 할 것을 요청받는다. OAuth는 서비스 프로바이더가 먼저 사용자를 인증하고, 컨수머에게 접근권한을 줄 것인지 승인을 받는다.

Jane은 브라우저에 있는 URL을 통해 그녀는 지금 Faji사이트에 있다는 것을 알게 되며, 아이디와 비밀번호를 입력합니다.



OAuth는 Jane이 그녀의 아이디와 비밀번호를 Beppa나 다른 사이트들이 공유하지 않게끔 해준다. Jane이 그녀의 faji에 대한 비밀정보(아이디, 비밀번호)를 beppa.com에 입력하는 과정이 없기 때문이다. Faji에서 로그인에 성공하면, Jane은 Beppa에게 Faji에 접근할 수 있는 권한을 부여하기 위한 승인을 하게 된다. Faji는 Jane에게 누가 접근요청을 하는지(여기서는 Beppa)알려주며 승인을 할 것인지 묻는다. Jane은 승낙하거나 거절할 수 있다.

Jane은 Beppa가 필요한 만큼만 제한적으로 접근할 수 있게 해줍니다. 그녀는 Beppa가 그녀의 사진을 수정하거나 다른 일들을 하는 것을 원하지 않습니다. 또한, Beppa가 Faji에 있는 그녀의 사진을 가져오는데는 1시간이면 충분하다는 것을 알고 있습니다.



Jane이 요청을 승낙하면 Faji는 리퀘스트 토큰(Request Token)을 Jane으로부터 "사용자 승인이 된" 토큰으로 표시한다. Jane의 브라우저는 리퀘스트 토큰(Request Token)과 함께 보내온 http://beppa.com/order 주소로 리다이렉트 시킨다. 이는 Beppa가 Jane의 사진을 가져오는 작업을 계속 할 수 있다는 것을 알려주는 것이다.

Jane은 Beppa가 Faji계정으로부터 사진을 가져오는 것을 기다립니다.



Jane이 기다리는 동안, Beppa는 인증된 리퀘스트 토큰(Request Token)과 엑세스 토큰(Access Token)을 교환한다. 리퀘스트 토큰(Request Token)은 사용자의 승인을 얻어내기 위해 사용될 뿐이며, 엑세스 토큰(Access Token)은 보호된 자원(Protected Resource : 여기서는 Jane의 사진)에 접근하기 위해 사용된다. 첫 번째 요청에서 Beppa는 리퀘스트 토큰(Request Token)을 엑세스 토큰(Access Token)으로 바꾸고, 두 번째로 사진을 요청(여러번 요청이 될 수 있다. 한번은 사진을 리스트를, 다른 한번은 각 사진을 가지고 오는등...)한다.


Beppa가 작업을 마치면 Jane의 브라우저는 작업을 다 마쳤음을 보여주는 화면으로 바뀐다.
Beppa는 성공적으로 Jane의 사진을 가져왔다. 그녀의 사진을 선택할 수 있도록 썸네일로 보여준다.

jane은 Beppa가 그녀의 아이디와 비밀번호를 모르는데도 불구하고 그녀의 사진을 가져왔다는 것에 놀랍니다. 그녀는 화면에서 시키는데로 인쇄요청을 합니다.





다음 글은 OAuth프로토콜 관점에서 본 OAuth 인증과정에 대해 알아본다.

출처1 : http://hueniverse.com/2007/10/beginners-guide-to-oauth-part-ii-protocol-workflow/
출처2 : http://dev.springnote.com/pages/1083036
반응형