'oauth1.0'에 해당되는 글 1건

3월 중으로 오픈마루 서비스의 API 인증방식이 OAuth1.0을/도 지원합니다

안녕하세요. 오픈마루 오픈플랫폼팀의 정상일(humbroll)입니다.

현재 웹 서비스들의 사용자 데이터 흐름이 서비스중심에서 사용자중심으로 움직이려는 모습을 보이고 있으며, 이는 매우 고무적인 현상이라고 생각합니다.

이를 위해서는 여러 서비스들에 흩어져 있는 사용자의 중요한 데이터들을 주고 받을 수 있는 그 무언가가 필요합니다. 현재 그 것을 위해 각 서비스 벤더들은 나름의 인증방식을 제공하고 있지만, 각 서비스마다 정의하는 바가 조금씩 다르고, 이에 따라 개발이 어려운 것이 현실입니다. '표준'의 부재가 가장 큰 문제이죠. 이를 해결하기 위하여 서비스와 서비스간의 사용자의 데이터 통신을 위한 인증의 표준화를 목적으로 OAuth(Open protocol Authorization)가 제기되었습니다.

차후 OAuth의 공식 한국어 페이지를 운영할 계획입니다만,

(현재로서 OAuth를 이해하기 위해서는 OAuth공식페이지김승현님의 OAuth에 대한 블로그 포스팅 을 참고하시면 되겠습니다.)

이에, 3월 중으로


오픈마루 서비스의 API 인증방식이 OAuth1.0을/도 지원할 예정입니다.

앞으로 OpenAPI를 제공하는 많은 서비스들이 이 OAuth를 적용하여 진정한 의미의 '사용자 중심의 웹'이 실혔되었으면 하는 바람입니다.

OAuth의 공식 홈페이지에 가보시면 각 언어들에 대한 라이브러리를 제공하며, 프로바이더와 컨수머 샘플코드도 어렵지 않게 찾아볼 수 있습니다. Ruby의 경우 프로바이더와 컨수머 구현을 위해서 oauth-plugin이나 oauth4r 이 제공되고 있지만 실제 세팅을 좀 더 해야하기때문에, oauth4r 에 있는 소스코드를 적용하여 '돌아가는' 샘플 코드를 공유합니다.


프로바이더 소스코드 : oauth_provider.tar

컨수머 소스코드 : oauth_consumer.tar


rails버전이 2.0 이하일 경우는

  • gem update --system

로 rails환경 전체를 업데이트 하거나 이것이 여유치 않으실 경우는

하셔서 rails를 임베드하시기 바랍니다.

필요한 라이브러리를 설치합니다. oauth, ruby-hmac

  • gem install oauth
  • gem install ruby-hmac

OAuth 샘플코드 구동을 하기 위한 설명을 간단히 하겠습니다.

각 프로젝트에서 config/database.yml 에서 디비 설정을 하신 후

  • rake db:create && rake db:migrate

를 합니다. 한번 실행시켜 봅시다.

컨수머는 5000포트를, 프로바이더는 5001포트를 사용합니다.(코드를 직접 고치셔서 다른 포트로 사용해도 무방합니다.)

컨수머 프로젝트에서는

  • ruby script/server -p 5000

프로바이터 프로젝트에서는

  • ruby script/server -p 5001

합니다.


우선 컨수머사이트(5000포트를 쓰는)를 프로바이더사이트(5001포트를 쓰는)에 등록해야 합니다.

http://localhost:5001/ => http://localhost:5001/get_contacts/new 에 있는 텍스트필드에 http://localhost:5000/use_get_contacts/oauth/callback 입력(컨수머의 config/use_get_contacts.oauth.yml에서 수정 가능) 한 후 Registaer버튼 클릭=> 화면의  Consumer Key값과 Consumer Secret값을 컨수머프로젝트의 config/use_get_contacts.oauth.yml의  consumer_key,consumer_secret값으로 삽입 =>컨수머사이트(5000포트) 재시작 => http://localhost:5000/users 에서   New user 링크를 통해 사용자 등록=>Establish OAuth with provider @ http://localhost:5001/get_contacts/authorize  링크를 통해서http://localhost:5000/use_get_contacts/new 로 이동하여 Create 클릭

이 때부터 컨수머와 프로바이더 사이의 인증이 시작됩니다.

5001번사이트에 로그인이 안되어 있을 경우는 로그인을 하라고 하고, 로그인을 하면 컨수머사이트에서 프로바이더사이트에 있는 사용자의 데이터 접근을 허가할 것인지에 대해서 물어봅니다.


Yes클릭!


다시 컨수머사이트로 돌아올 것입니다. 이로서 모든 인증 과정이 끝나고 프로바이더의 이른바 Protected Resource에 접근할 수 있는 Access Token과 Access Secret을 받옵니다.

다음과 같이 access token을 받아왔습니다. (access secret도 역시 받은 상태입니다)


Successful, access_key(13831917959380963787) received


이상입니다.


back-end에서 이루어지는 인증절차는 OAuth1.0 Spec에 잘 나와 있지만 다음 그림을 보시면 더 쉽게 이해하실 수 있습니다.



샘플에 문제가 있으면 댓글 남겨주시기 바랍니다.

많은 서비스들이 사이좋게 서로의 프로바이더, 컨수머가 되어 더 낳은 '웹'이 되길 희망합니다. ^^/

이 글은 스프링노트에서 작성되었습니다.

p.s : me2day에서도 곧 oauth를 지원해 주시리라 믿습니다! -0-/
Posted by