Tumblr OAuth回调URL

Tumblr OAuth回调URL,oauth,tumblr,Oauth,Tumblr,我正在请求头中设置oauth_回调URL,当我在Twitter中这样做时,它工作正常,用户被重定向到回调URL。但是使用Tumblr的API,回调URL被忽略,用户被重定向到默认URL。还有其他人经历过吗?除了标题,还有其他地方需要我设置吗?我试着把它作为一个参数传入,但也没有真正起作用 任何帮助都将不胜感激。Tumblr这样做(我想)是为了安全。它们要求在应用程序注册时定义回调URL,并且不允许在实现过程中覆盖回调URL 安全问题是确保没有人可以窃取您的应用程序令牌,并尝试使用它来利用您的声誉

我正在请求头中设置oauth_回调URL,当我在Twitter中这样做时,它工作正常,用户被重定向到回调URL。但是使用Tumblr的API,回调URL被忽略,用户被重定向到默认URL。还有其他人经历过吗?除了标题,还有其他地方需要我设置吗?我试着把它作为一个参数传入,但也没有真正起作用

任何帮助都将不胜感激。

Tumblr这样做(我想)是为了安全。它们要求在应用程序注册时定义回调URL,并且不允许在实现过程中覆盖回调URL

安全问题是确保没有人可以窃取您的应用程序令牌,并尝试使用它来利用您的声誉来访问客户的数据。通过强制所有回调转到默认URL,它们可以保证只有您的应用程序才能获得访问令牌

处理这一问题的两种方法是:

1) 让默认URL根据cookie或其他数据重定向到您希望它去的地方 2) 为不同的回调URL使用不同的应用程序令牌。

Tumblr这样做(我假设)是为了安全。它们要求在应用程序注册时定义回调URL,并且不允许在实现过程中覆盖回调URL

安全问题是确保没有人可以窃取您的应用程序令牌,并尝试使用它来利用您的声誉来访问客户的数据。通过强制所有回调转到默认URL,它们可以保证只有您的应用程序才能获得访问令牌

处理这一问题的两种方法是:

1) 让默认URL根据cookie或其他数据重定向到您希望它去的地方
2) 为不同的回调url使用不同的应用程序令牌。

如果您正在尝试在回调url中嵌入用户ID,那么这篇文章可以帮助您。
您可以在会话中保存oauth令牌,稍后在回调时可以从会话中检索用户

对令牌请求:

def ask_access
  tumblr_consumer = get_consumer
  if tumblr_consumer
    #1. get a request token
    request_token = tumblr_consumer.get_request_token
    session[:request_token] = request_token
    session[:user_token] = "#{request_token.params[:oauth_token]}_#{current_user.id}"
    #2. have the user authorize
    redirect_to request_token.authorize_url
  else
    render :text=> "Failed to acquire request token from Tumblr."
  end
end
def call_back
  if params[:oauth_token] && params[:oauth_verifier]
    request_token = session[:request_token]
    user_id  = session[:user_token].split("_")[1]
    user = UserProfile.find user_id
    ##3. get an access token
    access_token = request_token.get_access_token({:oauth_verifier => params[:oauth_verifier]})
    user.tumblr_token = access_token.params[:oauth_token]
    user.tumblr_secret = access_token.params[:oauth_token_secret]
    user.save!
  end
end
回拨时:

def ask_access
  tumblr_consumer = get_consumer
  if tumblr_consumer
    #1. get a request token
    request_token = tumblr_consumer.get_request_token
    session[:request_token] = request_token
    session[:user_token] = "#{request_token.params[:oauth_token]}_#{current_user.id}"
    #2. have the user authorize
    redirect_to request_token.authorize_url
  else
    render :text=> "Failed to acquire request token from Tumblr."
  end
end
def call_back
  if params[:oauth_token] && params[:oauth_verifier]
    request_token = session[:request_token]
    user_id  = session[:user_token].split("_")[1]
    user = UserProfile.find user_id
    ##3. get an access token
    access_token = request_token.get_access_token({:oauth_verifier => params[:oauth_verifier]})
    user.tumblr_token = access_token.params[:oauth_token]
    user.tumblr_secret = access_token.params[:oauth_token_secret]
    user.save!
  end
end

如果您正在尝试在回调url中嵌入用户ID,那么本文可以帮助您。
您可以在会话中保存oauth令牌,稍后在回调时可以从会话中检索用户

对令牌请求:

def ask_access
  tumblr_consumer = get_consumer
  if tumblr_consumer
    #1. get a request token
    request_token = tumblr_consumer.get_request_token
    session[:request_token] = request_token
    session[:user_token] = "#{request_token.params[:oauth_token]}_#{current_user.id}"
    #2. have the user authorize
    redirect_to request_token.authorize_url
  else
    render :text=> "Failed to acquire request token from Tumblr."
  end
end
def call_back
  if params[:oauth_token] && params[:oauth_verifier]
    request_token = session[:request_token]
    user_id  = session[:user_token].split("_")[1]
    user = UserProfile.find user_id
    ##3. get an access token
    access_token = request_token.get_access_token({:oauth_verifier => params[:oauth_verifier]})
    user.tumblr_token = access_token.params[:oauth_token]
    user.tumblr_secret = access_token.params[:oauth_token_secret]
    user.save!
  end
end
回拨时:

def ask_access
  tumblr_consumer = get_consumer
  if tumblr_consumer
    #1. get a request token
    request_token = tumblr_consumer.get_request_token
    session[:request_token] = request_token
    session[:user_token] = "#{request_token.params[:oauth_token]}_#{current_user.id}"
    #2. have the user authorize
    redirect_to request_token.authorize_url
  else
    render :text=> "Failed to acquire request token from Tumblr."
  end
end
def call_back
  if params[:oauth_token] && params[:oauth_verifier]
    request_token = session[:request_token]
    user_id  = session[:user_token].split("_")[1]
    user = UserProfile.find user_id
    ##3. get an access token
    access_token = request_token.get_access_token({:oauth_verifier => params[:oauth_verifier]})
    user.tumblr_token = access_token.params[:oauth_token]
    user.tumblr_secret = access_token.params[:oauth_token_secret]
    user.save!
  end
end
据介绍,这是Tumblr API中的一个bug,已经修复

你们中的许多人都感到沮丧,因为你们无法推翻这一决定 当用户试图授权其权限时的回调url 应用好消息:我们已经修补了导致此问题的bug 具体问题

现在,您可以通过oauth_回调参数传递url,我们将 完成后,将用户重定向到该端点

让我们看一个简单的例子

当用户看到屏幕授权您的应用程序时,您 应该能够用 url中的oauth_回调参数

上面的url将用户重定向到 mysite.com/oauth_callback/testing并让您知道用户是否 批准或拒绝您的应用

2013年3月14日更新

从今天开始,Tumblr不再考虑oauth_回调参数。我以前链接到的博客帖子已被删除。我最终使用了一个已接受答案的变体来解决它。

根据,这是Tumblr API中的一个错误,已经修复

你们中的许多人都感到沮丧,因为你们无法推翻这一决定 当用户试图授权其权限时的回调url 应用好消息:我们已经修补了导致此问题的bug 具体问题

现在,您可以通过oauth_回调参数传递url,我们将 完成后,将用户重定向到该端点

让我们看一个简单的例子

当用户看到屏幕授权您的应用程序时,您 应该能够用 url中的oauth_回调参数

上面的url将用户重定向到 mysite.com/oauth_callback/testing并让您知道用户是否 批准或拒绝您的应用

2013年3月14日更新


从今天开始,Tumblr不再考虑oauth_回调参数。我以前链接到的博客帖子已被删除。我最终使用了一个已接受答案的变体来解决这个问题。

Tumblr实现此行为的方式与Twitter不同,因此同样使用Ruby OAuth库会产生不同的结果

对于@callback_url的值,这在Twitter中起作用:

  @request_token = @oauth.get_request_token({
    oauth_callback:@callback_url
  })
  redirect_to @request_token.authorize_url
但是对于Tumblr,您将被重定向到默认URL。要指定其他URL,应执行以下操作:

@request_token = @oauth.get_request_token
redirect_to @request_token.authorize_url + '&' + { oauth_callback:@callback_url }.to_query

这与他们的文档/博客文章(在另一个答案中引用)一致。根据OAuth 1.0a规范,我没有检查这是否“正确”。

Tumblr实现此行为的方式与Twitter不同,因此同样使用Ruby OAuth库会产生不同的结果

对于@callback_url的值,这在Twitter中起作用:

  @request_token = @oauth.get_request_token({
    oauth_callback:@callback_url
  })
  redirect_to @request_token.authorize_url
但是对于Tumblr,您将被重定向到默认URL。要指定其他URL,应执行以下操作:

@request_token = @oauth.get_request_token
redirect_to @request_token.authorize_url + '&' + { oauth_callback:@callback_url }.to_query

这与他们的文档/博客文章(在另一个答案中引用)一致。根据OAuth 1.0a规范,我还没有检查这是否“正确”。

我无法回复Jonathan Tran的回答,因为我的帐户还年轻,但如他所说,在授权URL中发布回调URL不再有效。我在推特上问道,以下是约翰·邦廷的回答:

在分配了所有正确的键之后,我成功地使用以下命令(在Python中)重新路由回调URL:

consumer = oauth.Consumer(consumer_key, consumer_secret)
client = oauth.Client(consumer)
resp, content = client.request(request_token_url, "GET")
resp, content = client.request(request_token_url, "POST", body=urllib.urlencode({"oauth_callback": "[your own URL here]"}))

我无法回答乔纳森·特兰的回答,因为我的账户还年轻,但阿宝