コールバックなしで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)