액티브 리소스에서 OAuth 사용하기
May 9th, 2008
액티브 리소스는 인증을 위해 Basic Authentication을 사용한다. 하지만 OAuth - 오픈 API를 위한 인증 표준을 사용하기 위해서는 약간의 패치가 필요하다.
- class ActiveResource::Connection
def request(method, path, *arguments)
# ...
result = http.send(method, path, *arguments)
#...
end
end
하고 싶은 것은 위 코드에서 http.send 부분을 아래 코드로 바꿔주는 것 뿐이다. 실제 추가된 동작은 oauth! 메서드를 호출해 OAuth를 위한 헤더를 추가해주는 것이 전부다.
- @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에서는 이런 식으로 사용한다.
- ActiveResource::Connection.oauth_configuration = Springnote::Base.configuration
말은 쉽지만, 이런 몽키 패칭은 생각보다 번거롭다. 결과 코드도 깔끔하다거나, 권장할만한 것은 아니다.
- 전체 소스 보기 - request_with_oauth.rb
일단, 내가 지금 필요한 부분은 여기까지이므로(^^;) 여기서 마무리하고, 다음에 기회가 되면 좀 더 나은 코드를 만들어봐야겠다. 목표는 request를 재정의하는 것이 아니라 authorization_header 메서드를 재정의하는 것이다. 그리고 설정도 이런 문법을 도입한다.
- 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