2011-11-07 34 views
6

我有一個簡單的Rails應用程序,我試圖使用Netflix API來訪問我的一些訂閱者信息,例如我的歷史記錄和隊列。我的問題是,無論我做什麼,Netflix都不會使用我的oauth_callback網址,而是在使用我的用戶憑據授權應用程序後,將我轉到Netflix站點。如何使Netflix OAuth API使用我的回調?

這裏是一個正在請求到Netflix的API

class ExportController < ApplicationController 

    def export 
    consumer = OAuth::Consumer.new(ENV['NETFLIX_KEY'],ENV['NETFLIX_SECRET'], 
     :site => "http://api.netflix.com", 
     :request_token_url => "http://api.netflix.com/oauth/request_token", 
     :access_token_url => "http://api.netflix.com/oauth/access_token", 
     :authorize_url => "https://api-user.netflix.com/oauth/login") 
    request_token = consumer.get_request_token 
    session[:request_token]=request_token 
    session[:request_token_secret]=request_token.secret 
    url = request_token.authorize_url(:oauth_callback => "http://#{ENV['OAUTH_CALLBACK_DOMAIN']}/export_callback/", :oauth_consumer_key => ENV['NETFLIX_KEY'], 
     :application_name => ENV['APPLICATION_NAME']) 
    redirect_to url 
    end 

    def export_callback 
    @request_token=OAuth::RequestToken.new(session[:request_token],session[:request_token_secret]) 
    @access_token = @request_token.get_access_token(:oauth_verifier => params[:oauth_verifier]) 
    end 
end 

控制器正確地重定向到https://api-user.netflix.com/oauth/login站點,所有的參數設定正確的控制器編碼。我收到Netflix登錄/授權應用程序頁面。

Netflix Link Account page

但是,如果我看這個頁面的源代碼,我看到在我檢查了幾種不同的方式,該oauth_callback字段設置爲oob

 <input type="hidden" name="oauth_callback" value="oob"/> 

的形式,和我將oauth_callback參數設置爲與Netflix Authentication Walkthrough相同。實際上,當我瀏覽演練並在他們的字段中放入回調url時,它實際上會重定向回我的rails應用程序。

所以,我的問題,有誰知道如何使Netflix尊重我的oauth_callback領域?

編輯:

https://api-user.netflix.com/oauth/login?oauth_callback=http%3A%2F%2Fnetflix.dev%2Fexport_callback%2F&oauth_consumer_key=[REMOVED]&oauth_nonce=631831&oauth_timestamp=1321458391&application_name=[REMOVED]&oauth_token=[REMOVED] 

你可以看到oauth_callback=http%3A%2F%2Fnetflix.dev%2Fexport_callback%2F被設置,這是我的本地Rails應用程序的路由。

EDIT2:

我使用的oauth (0.4.5)rails (3.1.0)ruby-1.9.2-p290 [ x86_64 ]在Mac OS X 10.6.8。

+0

當請求發送給api用戶時(請不要忘記隨機化哈希!),您還可以提供請求參數嗎? –

+0

是不是爲您的consumer.get_request_token調用oauth_callback?請參閱http://developer.netflix.com/docs/Security – esskar

+0

@phil pirozhkov我已將請求添加到api用戶。 – sorens

回答

1

形式上的oob可能指的是「越界」。問題是:

request_token = consumer.get_request_token 

Netflix的讓你在回調URL傳遞時,你得到的請求令牌,並驗證在登錄頁面的URL。在你的情況下,如果你改變它:

request_token = consumer.get_request_token( 
      :oauth_callback => 
      "http://#{ENV['OAUTH_CALLBACK_DOMAIN']}/export_callback/") 

一切都應該工作從這一點上,表格將得到這個值。我測試了你的代碼,並得到了相同的oob,然後添加了更改,並在表單中給出了正確的值。

-1

嘗試Netflix Authentication Walk-Through並查看它是否適用於您的帳戶?它確實爲我使用Firefox。 (我也複製&把這個url粘貼到IE然後正確重定向)。然後,您應該嘗試將漫遊的網址與您正在生成的網址進行比較,並指出問題。

+0

如果您閱讀我的問題,我已經表示我使用walk-through來比較我的結果。 – sorens

+0

我的不好,它混淆了我,因爲回調只是一個正常的參數:沒有簽名或任何東西;之後改變它不是問題(我的意思是在你看到網絡修復登錄屏幕後)! – esskar