5

コールバックなしでOAuth1.0をサポートするサイトからユーザーデータにアクセスしようとしています。標識ライブラリを使用していますが、接続しようとしているサイトでユーザーが確認コードを指定する必要がないため、アクセストークンを取得できません。道標からアクセストークンを取得するには、ある種の確認コードを提供する必要があるようです。

私の質問:このステップをバイパスして、アクセストークンを取得する方法はありますか?

そうしないと、「認証に失敗しました(サーバーが401で応答しました)」というメッセージが表示されます。クライアントを設定/登録しました。

既存のコードと、接続しようとしているサイトの詳細を含めました(http://www.stepgreen.org-以下の情報を表示するには、アカウントを作成する必要があります)。

認証:OAuth

StepGreensが推奨する認証方法はOAuthです。OAuthの詳細については、OAuth.netにアクセスしてください。現在、コールバックなしのOAuth1.0をサポートしています。

選択したOAuthライブラリを構成するには、いくつかの追加情報が必要になります。

リクエストトークンのリクエスト:/ oauth / request_tokenアクセストークンのリクエスト:/ oauth / access_token認証URL:/ oauth / authorizeクライアントでOAuthを使用するには、クライアントを設定することを忘れないでください。

public static void main(String[] args) throws Exception{

OAuthConsumer consumer = new DefaultOAuthConsumer( CONSUMER_KEY, CONSUMER_SECRET,    
                                                   SignatureMethod.HMAC_SHA1);

OAuthProvider provider = new DefaultOAuthProvider(consumer, REQUEST_TOKEN_URL, 
                                                  ACCESS_TOKEN_URL, AUTHORIZE_URL);

System.out.println("Fetching request token...");

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

System.out.println("Request token: " + consumer.getToken());
System.out.println("Token secret: " + consumer.getTokenSecret());

System.out.println("Now visit:\n" + authUrl + "\n... and grant this app authorization");
System.out.println("Enter the verification code and hit ENTER when you're done:");

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String verificationCode = br.readLine();
System.out.println("Fetching access token...");

String verificationCode = consumer.getToken();
provider.retrieveAccessToken(verificationCode.trim());

System.out.println("Access token: " + consumer.getToken());
System.out.println("Token secret: " + consumer.getTokenSecret());

URL url = new URL("http://www.stepgreen.org/api/v1/users/username/ted5000s.xml");          
HttpURLConnection request = (HttpURLConnection) url.openConnection();
consumer.sign(request);

InputStream stream = (InputStream)request.getContent();
System.out.println("Result = " + convertStreamToString(stream));
System.out.println("Sending request...");
request.connect();

System.out.println("Response code: " + request.getResponseCode() + " " + 
request.getResponseMessage());

}

応答:

リクエストトークンを取得しています...

トークンのリクエスト:プライバシー上の理由で非表示

トークンシークレット:プライバシー上の理由で非表示

http://www.stepgreen.org/oauth/authorize?oauth_token=hidden ...にアクセス し、このアプリに認証を付与します。確認コードを入力し、完了したらEnterキーを押します。

アクセストークンを取得しています...スレッド"main"の例外oauth.signpost.exception.OAuthNotAuthorizedException:承認に失敗しました(サーバーが401で応答しました)。これは、コンシューマキーが正しくないか、署名が一致しなかった場合に発生する可能性があります。at oauth.signpost.basic.DefaultOAuthProvider.retrieveToken(DefaultOAuthProvider.java:126)at oauth.signpost.basic.DefaultOAuthProvider.retrieveAccessToken(DefaultOAuthProvider.java:96)at Test.main(Test.java:89)

4

0 に答える 0