1

我正在与向我提供一些含糊指示的客户合作。这就是我正在做的事情(CommonsHttpOAuthConsumer用作消费者和DefaultOAuthProvider提供者)

  1. 我可以通过这样做获得响应令牌:

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

    这是带有参数的 URL 的形式,因此我正在解析实际的令牌,例如: 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 个状态,但我得到的是一般错误消息。

4

1 回答 1

0

retrieveRequestToken不返回请求令牌,它返回您需要将用户发送到的 authenticationUrl,以便他们可以登录。请求令牌保存在提供程序对象中。

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和上面提到的代码

希望这可以帮助你//乔纳斯

于 2009-11-25T13:34:58.250 回答