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上記のコードを実行します

これがお役に立てば幸いです//Jonas

于 2009-11-25T13:34:58.250 に答える