OAuth가 무어냐?

|

지난 Daum DevDay에 갔다가 OAuth라는것에 대해 알게 되었다.

이론적인 이야기는 글쓰는 본인도 잘 모르므로...



그런 이야기는 패스하고,


어려운말들 다 빼고 한번 설명해본다.


자, 그럼 왜 OAuth를 써야 하는건가?

예를 들어, 포털사이트 Daum에 내 블로그가 있는데, 내가 운영하는 다른 사이트로
블로그에 올렸던 글을 복사 해 오고 싶은 경우에 쓸 수 있는것이 OAuth이다.

물론, 내부적으로 HTTP 데이터를 주고받는 방식으로 로그인을 처리하고,
세션을 유지한채로 html데이터를 파싱하여 가져오는 방법이 있겠지만,
너무 원시적인 방법이 아니던가.

데이터를 xml형태로 주고 받는게 처리하기에 좋은데,
요청 주소에 아이디와 비밀번호를 바로 넣기엔 보안에 취약하고.

OAuth는 그래서 이렇게 처리합니다.
"내가 운영하는 다른 사이트"를 "컨슈머(Consumer)"라고 합니다.
그리고 "다음 블로그", 크게 봐서 "다음"을 "프로바이더(Provider)"라고 합니다.

Consumer는 인증이 필요한 페이지를 요청하기 위해 먼저 사용자를
Provider의 로그인 페이지로 보냅니다. (그 전에 Request Token을 받아오는 작업이 필요합니다.)
이 로그인 페이지는 Provider에서 운영이 되죠.
그 페이지에서 로그인을 하면 로그인한 사용자에게 정보 사용에 대한 동의를 받고
Consumer의 페이지로 넘기면 Access Token을 받아오는 작업을 거친 후
Consumer는 Access Token을 이용하여 제한된 리소스(블로그)에 접근할 수 있게 됩니다.

Provider에 Consumer정보를 미리 등록하면(OAuth 발급 신청), Consumer Key와 Consumer Secret이 발급이 됩니다.
등록할때, 웹서비스용으로 신청을 하면 콜백주소를 입력해야 하는데 이건 아래에서 설명합니다.

전체적인 과정은 아래 이미지와 같습니다.

사용자 삽입 이미지
(출처 : Daum DNA , http://dna.daum.net )

[A ~ B]
Consumer Key와 Consumer Secret으로 임시로 사용할 Request Token을 요청합니다.
응답으로는 oauth_token과 oauth_token_secret이 내려옵니다.
HTML Body에 QueryString형태로 내려옵니다.

[C ~ D]
A~B에서 받은 oauth_token을 인증URL에 붙여 로그인창을 호출합니다.
사용자가 로그인 후 동의 과정을 거친 후 Consumer Key발급시 입력했던 콜백 주소로 redirect되게 됩니다.
이때 redirect의 페이지의 GET데이터로 verifier라는 값이 들어오게 됩니다.

[E ~ F]
그럼 이제 Consumer Key와 verifier로 실제 접근에 필요한 AccessKey를 요청하게 됩니다.
A~B에서의 방법과 비슷하게 요청과 응답이 처리됩니다.
응답으로 내려오는 oauth_token과 oauth_token_secret이 Access Token입니다.
A~B에서 내려오는 값들과 이름은 같지만 실제 사용되는 용도는 다릅니다.



쉽게 풀어 쓴다고 써봤는데 쓰고보니 그런것 같지도 않은듯...?

일단은 자바스크립트와 PHP로 oauth를 사용할 수 있도록 만들어놓은게 있는데
직접 몇번 사용해보고 포스팅하든가 해야할것 같다.

실제 코딩하는건 다음 DNA 블로그에 올라와 있으니 동영상을 보시면 될 듯. (저역시 동영상 보고 이해...)
링크 : http://daumdna.tistory.com/664

And