【问题标题】:How do I make the Netflix OAuth API use my callback?如何让 Netflix OAuth API 使用我的回调?
【发布时间】:2011-12-23 11:23:29
【问题描述】:

我有一个简单的 Rails 应用程序,我正在尝试使用 Netflix API 来访问我的一些订阅者信息,例如我的历史记录和队列。我的问题是,无论我做什么,Netflix 都不会使用我的 oauth_callback 网址,而是在我使用我的用户凭据授权应用程序后将我转发到 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 登录/授权应用页面。

但是,如果我查看此页面的来源,我会在表单中看到 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 应用程序的路由。

编辑2:

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

【问题讨论】:

  • 能否在请求发送给 api-user 时提供请求参数(别忘了随机化哈希值!)?
  • 不是你的 oauth_callback 调用 consumer.get_request_token 吗?见developer.netflix.com/docs/Security
  • @phil pirozhkov 我已将请求添加到 api-user。
  • @esskar 也许?不知道这应该如何帮助我。如果您转到该页面并找到标题为“要求订阅者登录”的部分,您将看到我被卡住的步骤。我通过 oauth gem 使用我的 callback_url 作为参数向 netflix API 发出请求,但 netflix 忽略了它。

标签: ruby-on-rails-3 oauth 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 Authentication Walk-Through 看看它是否适用于您的帐户?它确实对我使用 Firefox 有用。 (我也将 url 复制并粘贴到 IE 中并正确重定向)。然后,您应该尝试将演练中的 url 与您正在生成的 url 进行比较并确定问题。

    【讨论】:

    • 如果您阅读了我的问题,我已经表明我使用演练来比较我的结果。
    • 我的错,这让我很困惑,因为回调只是一个普通参数:没有签名或任何东西;之后改变它不是问题(我的意思是在你看到网络修复登录屏幕之后)!
    猜你喜欢
    • 2010-11-11
    • 2014-03-11
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    • 2015-11-26
    • 2011-01-27
    • 1970-01-01
    • 2014-10-14
    相关资源
    最近更新 更多