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

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

Вот код контроллера, который делает запрос к API Netflix.

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%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.

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

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


person sorens    schedule 07.11.2011    source источник
comment
Не могли бы вы также указать параметры запроса, когда запрос отправляется пользователю API (и не забудьте рандомизировать хэши!)?   -  person phil pirozhkov    schedule 16.11.2011
comment
разве это не oauth_callback для вашего вызова Consumer.get_request_token? см. developer.netflix.com/docs/Security.   -  person esskar    schedule 16.11.2011
comment
@phil pirozhkov Я добавил запрос к пользователю API.   -  person sorens    schedule 16.11.2011
comment
@esskar возможно? не уверен, как это должно помочь мне. Если вы перейдете на эту страницу и найдете раздел «Попросите подписчика войти в систему», вы увидите шаг, на котором я застрял. Я делаю запрос к API netflix через гем oauth с моим callback_url в качестве параметра, но netflix его игнорирует.   -  person sorens    schedule 16.11.2011


Ответы (2)


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

person christophercotton    schedule 15.12.2011

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

person esskar    schedule 16.11.2011
comment
Если вы читали мой вопрос, я уже указал, что использовал пошаговое руководство для сравнения своих результатов. - person sorens; 16.11.2011
comment
Плохо, это меня смущает, так как обратный вызов - это просто обычный параметр: не подписанный или что-то в этом роде; изменить его впоследствии не проблема (я имею в виду после того, как вы увидите экран входа в систему net fix)! - person esskar; 16.11.2011