Библиотеки OAuth 1.0 для Android (Java)
Я пытаюсь получить доступ к данным пользователя с сайта, который поддерживает OAuth 1.0 без обратных вызовов. Я использую библиотеку указателей и не могу получить токен доступа, потому что сайт, к которому я пытаюсь подключиться, не требует от пользователя указывать код подтверждения. Чтобы получить токен доступа от Signpost, кажется, мне нужно предоставить некоторый тип кода подтверждения.
МОЙ ВОПРОС: Есть ли способ обойти этот шаг и получить токен доступа?
В противном случае я получаю сообщение "Авторизация не удалась (сервер ответил 401)". Я настроил / зарегистрировал моего клиента.
Я включил свой существующий код и более подробную информацию о сайте, к которому я пытаюсь подключиться (http://www.stepgreen.org - вам нужно создать учетную запись, чтобы увидеть информацию ниже):
Аутентификация: OAuth
StepGreens предпочтительным методом аутентификации является OAuth. Для получения дополнительной информации об OAuth вы должны посетить OAuth.net. В настоящее время мы поддерживаем OAuth 1.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). Это может произойти, если ключ потребителя был неверен или подписи не совпадали. в oauth.signpost.basic.DefaultOAuthProvider.retrieveToken(DefaultOAuthProvider.java:126) в oauth.signpost.basic.DefaultOAuthProvider.retrieveAccessToken(DefaultOAuthProvider.java:96) в Test.main(Test.java:89)