액티브 리소스는 인증을 위해 Basic Authentication을 사용한다. 하지만 OAuth - 오픈 API를 위한 인증 표준을 사용하기 위해서는 약간의 패치가 필요하다.

 

  1. class ActiveResource::Connection
      def request(method, path, *arguments)
        # ...
        result = http.send(method, path, *arguments)
        #...
      end
    end

 

하고 싶은 것은 위 코드에서 http.send 부분을 아래 코드로 바꿔주는 것 뿐이다. 실제 추가된 동작은 oauth! 메서드를 호출해 OAuth를 위한 헤더를 추가해주는 것이 전부다.

 

  1. @http = http
    req = create_http_request(method, path, arguments)
    req.oauth! @http, oauth_configuration.consumer, oauth_configuration.token, :signature_method => 'HMAC-SHA1'
     
    @http.request(req)

 

그리고 oauth_configuration에서 OAuth::Consumer, OAuth::Token 객체를 제공해주면 된다. SpringnoteResources에서는 이런 식으로 사용한다.

 

  1. ActiveResource::Connection.oauth_configuration = Springnote::Base.configuration

 

말은 쉽지만, 이런 몽키 패칭은 생각보다 번거롭다. 결과 코드도 깔끔하다거나, 권장할만한 것은 아니다.

 

 

일단, 내가 지금 필요한 부분은 여기까지이므로(^^;) 여기서 마무리하고, 다음에 기회가 되면 좀 더 나은 코드를 만들어봐야겠다. 목표는 request를 재정의하는 것이 아니라 authorization_header 메서드를 재정의하는 것이다. 그리고 설정도 이런 문법을 도입한다.

 

  1. class Page < ActiveResource::Base
      self.site = "http://api.springnote.com"
     
      # OAuth Configuration
      set_consumer_token 'key', 'secret'
      set_access_token   'key', 'secret'
    end

 

이 코드가 더 액티브 리소스와 잘 어울리는 것 같다.

 

Leave a Reply

Website

Email