Как мне заставить Netflix OAuth API использовать мой обратный вызов?

#ruby-on-rails-3 #oauth #netflix

#ruby-on-rails-3 #оавт #netflix

Вопрос:

У меня есть простое приложение Rails, с помощью которого я пытаюсь использовать Netflix API, чтобы получить доступ к некоторой информации о моих подписчиках, такой как моя история и очередь. Моя проблема в том, что независимо от того, что я делаю, Netflix не будет использовать мой oauth_callback URL, а вместо этого перенаправит меня на сайт Netflix после авторизации приложения с моими учетными данными пользователя.

Вот код контроллера, который отправляет запрос в 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

Однако, если я посмотрю на источник этой страницы, я увижу в форме, что для oauth_callback поля установлено значение oob

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

Я проверил несколько разных способов, и я устанавливаю oauth_callback параметр точно так же, как в пошаговом руководстве по аутентификации Netflix. Фактически, когда я прохожу пошаговое руководство и ввожу свой URL обратного вызова в их поле, он фактически перенаправляет обратно в мое приложение rails.

Итак, мой вопрос, кто-нибудь знает, как заставить Netflix уважать мое oauth_callback поле?

Редактировать:

 https://api-user.netflix.com/oauth/login?oauth_callback=http://netflix.dev/export_callback/amp;oauth_consumer_key=[REMOVED]amp;oauth_nonce=631831amp;oauth_timestamp=1321458391amp;application_name=[REMOVED]amp;oauth_token=[REMOVED]
  

Вы можете видеть, что oauth_callback=http://netflix.dev/export_callback/ установлено, что является маршрутом к моему локальному приложению rails.

правка2:

Я использую oauth (0.4.5) и rails (3.1.0) и ruby-1.9.2-p290 [ x86_64 ] в Mac OS X 10.6.8.

Комментарии:

1. Не могли бы вы также указать параметры запроса, когда запрос отправляется api-пользователю (и не забудьте рандомизировать хэши!)?

2. разве это не oauth_callback для вашего вызова consumer.get_request_token? смотрите developer.netflix.com/docs/Security

3. @phil pirozhkov Я добавил запрос к api-user.

4. возможно, @esskar? не уверен, как это должно мне помочь. Если вы перейдете на эту страницу и найдете раздел под названием «Попросите подписчика войти», вы увидите шаг, на котором я застрял. Я делаю запрос к netflix API через gem oauth с моим callback_url в качестве параметра, но netflix игнорирует его.

Ответ №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 , а затем добавил изменение, и оно дало правильное значение в форме.

Ответ №2:

Попробуйте пошаговую проверку подлинности Netflix и посмотрите, работает ли она для вашей учетной записи? у меня это сработало с использованием Firefox. (затем я также скопировал и вставил URL-адрес в IE и был перенаправлен правильно). Затем вы должны попытаться сравнить URL-адрес из пошагового просмотра с URL-адресом, который вы генерируете, и устранить проблему.

Комментарии:

1. Если вы читали мой вопрос, я уже указал, что использовал пошаговое руководство для сравнения своих результатов.

2. К сожалению, это меня смущает, поскольку обратный вызов — это просто обычный параметр: не подписан или что-то еще; изменение его впоследствии не проблема (я имею в виду, после того, как вы увидите экран входа в систему net fix)!