2009-11-20 4 views
1

Я работаю с клиентом, который предоставил мне несколько смутные инструкции . Вот что я делаю (с использованием CommonsHttpOAuthConsumer как потребителя и DefaultOAuthProvider как поставщика)OAuts with Signpost - как подписать POST, чтобы получить токен доступа

  1. Я смог получить маркер ответа от выполнения этого:

    String requestToken = provider.retrieveRequestToken 
    (OAuth.OUT_OF_BAND); 
    

    это в виде URL с Params поэтому я разбор фактического маркера из, например: https://foobar.com/oauth/login_authorize?oauth_token=XRFCGPbES3M2bYZy...

  2. Теперь - инструкции, которые я получаю сказать: Given the request token obtained in step 1, login with the user’s credentials (name and password) as POST parameters and sign the request with the request token/secret POST https://foobar.com/oauth/login_authorize

Вот где у меня проблемы. Очевидно, я должен ввести что requestToken где-то так я это делаю (post это HttpPost, который содержит учетные данные пользователя):

consumer.setTokenWithSecret(requestToken, SECRET); 
consumer.sign(post); 

Это не работает. Он фактически генерирует 200 статусов, но я получаю сообщение об ошибке .

ответ

0

retrieveRequestToken не возвращает токен запроса, он возвращает аутентификациюUrl, которую необходимо отправить пользователям, чтобы они могли войти. Маркер-запрос сохраняется в объекте-провайдере.

String authenticationUrl = provider.retrieveRequestToken(call_back_url) 

Примечание: В соответствии со стандартом oauth пользователи регистрируются на сайте провайдеров с их учетными данными. После того, как они сделали это, вы (как потребитель) можете получить токен доступа, после чего вы сможете получить доступ к своим данным на сайте провайдеров.

// After user has signed in 
provider.retrieveAccessToken(null) 

// access token is saved in provider and provider knows which consumer uses it 
// so now you can sign with your consumer and connect with the request 
URL url = new URL(protected_resources_url) 
HttpURLConnection request = (HttpURLConnection) url.openConnection(); 
consumer.sign(request) 
request.connect() 

Если у вас есть учетные данные пользователя вы можете сделать авторизацию в сценарии

// Using grails and functional-tests 
get(authenticationUrl) 
// Image the site shows a simple form with username/password and a login button 
setRedirectEnabled false 
form { 
    username = "mario" 
    password = "peach" 

    click "login" 
} 

И потом retrieveRequestToken и код, упомянутый выше

Надеются, что это помогает вам // Джонасу

 Смежные вопросы

  • Нет связанных вопросов^_^