URL обратного вызова Tumblr OAuth - PullRequest
       40

URL обратного вызова Tumblr OAuth

1 голос
/ 16 октября 2011

Я устанавливаю URL oauth_callback в заголовке запроса, когда я делаю это в Twitter, он работает нормально, и пользователь перенаправляется на URL обратного вызова.Но используя API Tumblr, URL-адрес обратного вызова игнорируется, и пользователь перенаправляется на URL-адрес по умолчанию.Кто-нибудь еще испытывал это?Есть ли где-нибудь еще, кроме заголовка, что я должен установить это?Я попытался передать его как параметр, но это тоже не сработало.

Любая помощь будет признательна.

Ответы [ 5 ]

5 голосов
/ 28 октября 2012

Согласно блогу разработчика Tumblr , эта ошибка в API Tumblr была исправлена.

Многие из вас были встревожены тем, что вы не можете переопределить URL-адрес обратного вызовакогда пользователь пытался авторизовать свое приложение.Хорошие новости: мы исправили ошибку, которая вызывала именно эту проблему.

Теперь вы можете передать URL с параметром oauth_callback, и мы перенаправим пользователя на эту конечную точку, как только вы закончите.

Давайте рассмотрим краткий пример.

Когда пользователю предоставляется экран для авторизации вашего приложения, вы должны иметь возможность переопределить ваш обратный вызов по умолчанию с параметром oauth_callback в вашем URL.

http://www.tumblr.com/oauth/authorize?oauth_token=your_token&oauth_callback=http%3A%2F%2Fmysite.com/oauth_callback/testing Приведенный выше URL перенаправит пользователя на mysite.com/oauth_callback/testing и сообщит, одобрил ли пользователь ваше приложение или отклонил его.

Обновление от 14 марта 2013 г. :

Начиная с сегодняшнего дня, Tumblr больше не использует параметр oauth_callback.Сообщение в блоге, на которое я ранее ссылался, было удалено.Я решил использовать вариант принятого ответа, чтобы обойти его.

2 голосов
/ 18 марта 2013

Я не могу ответить на ответ Джонатана Трана, так как моя учетная запись молода, но размещение URL обратного вызова в URL авторизации больше не работает, как он говорит. Я спросил в Твиттере, и вот ответ Джона Бантинга:

https://twitter.com/codingjester/status/313248230987157505

Я успешно смог перенаправить свой URL обратного вызова, используя следующее (здесь, в Python), после назначения всех подходящих ключей:

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]"}))
2 голосов
/ 17 октября 2011

Tumblr делает это (я полагаю) для безопасности.Они требуют, чтобы URL-адрес обратного вызова был определен при регистрации приложения, и они не будут переопределять его во время реализации.

Проблема безопасности состоит в том, чтобы никто не мог украсть ваш токен приложения и попытаться использовать его для использования.Ваша репутация, чтобы получить доступ к данным клиента.Заставив все обратные вызовы перейти на URL-адрес по умолчанию, они могут гарантировать, что только ваше приложение сможет получить токены доступа.

Два способа справиться с этим:

1) По умолчаниюURL-адрес перенаправляет туда, куда вы хотите, основываясь на файле cookie или других данных. 2) Используйте разные токены приложения для разных URL-адресов обратного вызова.

1 голос
/ 05 января 2012

Если вы пытаетесь встроить идентификатор пользователя в URL-адрес обратного вызова, то это сообщение может вам помочь.
Вы можете сохранить свой токен 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
0 голосов
/ 23 января 2013

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.

...