Весенний Социальный Твиттер Oauth - PullRequest
6 голосов
/ 01 ноября 2011

Я хочу использовать spring social для разработки приложения для твиттера, которое будет обновлять статус и загружать фотографии. Я не могу понять, как выполнить аутентификацию Oauth с помощью Spring social. Все примеры, которые я видел, говорили о жестком кодировании токена доступа, который работал бы толькодля этого конкретного пользователя. Я не хочу жестко кодировать что-либо, кроме ключей приложения.

Пожалуйста, кто-нибудь объяснит мне, как сделать Twitter Oauth с помощью Spring Social. Я прошел официальную документацию Spring Framework, но запутался, когда явидел другие примеры ..

Спасибо

Ответы [ 2 ]

11 голосов
/ 01 ноября 2011
  • Я видел разговоры о жестком кодировании маркера доступа, который работал бы только для этого конкретного пользователя. Я не хочу жестко кодировать что-либо, кроме ключей приложения.

"appkeys "aka consumer { key, secret } pair разрешает вашему приложению использовать API-интерфейсы Twitter, которые не требуют аутентификации пользователя .Думайте об этом, когда вы просматриваете веб-сайт в Твиттере, не входя в систему. Следовательно, у вас будет возможность поиска, получения временных шкал и т. Д. => Только для чтения.

На случай, если вы захотите отправьте что-то назад, вам придется заставить ваше приложение делать это от имени реальной учетной записи / пользователя Twitter.Подумайте о том, что кто-то пишет клиент Twitter => его могут загрузить многие разных пользователей, поэтому для правильной работы ему необходимы две вещи:

  • Быть зарегистрированным приложением Twitter => иметьconsumer { key, secret } пара
  • возможность публиковать твиты / изображения от имени пользователя => иметь access { token, secret } пару

для получения такого доступа{токен, секретная} пара, вы должны иметь "ОК" от этого пользователя / учетной записи.

Именно здесь приходит OAuth => он отправляет пользователя на страницу подтверждения, где он нажимает «ОК, я разрешаю этому приложению опубликовать от моего имени».Затем это «ОК» преобразуется в OAuthToken, которое может использовать ваше приложение.

Если все, что вам нужно, - это публиковать обновления от своего имени, тогда вам нужно одобрить собственное приложение Twitter и настаивать, чтобыOAuthToken будет использоваться вашим приложением.

К сожалению, Twitter пока не поддерживает OAuth 2.0, поэтому вам придется делать больше ... Вам нужно будет сделать OAuth 1.0a.

Документация Spring Social описывает поток OAuth 1.0a здесь , где вы можете увидеть поток визуально.

Чтобы «закодировать» этот поток с помощью Spring Social API, вы должны сначала запросить пару доступа {token, value} (для этого есть удобство ConnectController ):

TwitterConnectionFactory connectionFactory = 
    new TwitterConnectionFactory( "consumerKey", "consumerSecret" );
OAuth1Operations oauthOperations = connectionFactory.getOAuthOperations();
OAuthToken requestToken = oauthOperations.fetchRequestToken( "https://my-callback-url", null );
String authorizeUrl = oauthOperations.buildAuthorizeUrl( requestToken, OAuth1Parameters.NONE );
response.sendRedirect( authorizeUrl );

И как только он возвращается (к вашему URL обратного вызова), вы можете использовать OAuth1Operations, чтобы получить OAuthToken , который является именно этой парой.

// upon receiving the callback from the provider:
OAuthToken accessToken = oauthOperations.exchangeForAccessToken(
    new AuthorizedRequestToken(requestToken, oauthVerifier), null);

Теперь, когда у вас есть все, что вам нужно, у вас есть выбор:

Создать шаблон Twitter из этого OAuthToken:

String consumerKey = "..."; // The application's consumer key
String consumerSecret = "..."; // The application's consumer secret
String accessToken = accessToken.getValue();
String accessTokenSecret = accessToken.getSecret();
Twitter twitter = new TwitterTemplate( consumerKey, consumerSecret, accessToken, accessTokenSecret );

Создать подключение к Twitterобъект

Connection<Twitter> connection = connectionFactory.createConnection( accessToken );

Как только вы получите Connection, вы можете сохранить его через ConnectionRepository как , показанное здесь , поэтому вам не нужно проходить через получение токена доступаснова.

Вот API соединения .

3 голосов
/ 04 ноября 2011

Предыдущий ответ хорош, но это только часть истории ...

Существует как минимум 3 уровня, на которых вы можете работать с Spring Social: (1) напрямую использовать TwitterTemplate, и в этом случае вам нужно будет получить токен доступа и секретные данные с помощью собственных средств, (2) используйте OAuth1Template, возможно, через TwitterConnectionFactory, как показано в предыдущем ответе, чтобы получить токен доступа, и из этого создайте TwitterTemplate, в этом случае вам придется самостоятельно обрабатывать перенаправления и обратные вызовы или (3) использовать ConnectController в Spring Social, чтобы обрабатывать все для вы.

Использование ConnectController включает в себя наименьшее количество работы OAuth с вашей стороны. Вы просто настраиваете соответствующие части в Spring, а ConnectController позаботится обо всем остальном. Подробнее см. http://static.springsource.org/spring-social/docs/1.0.x/reference/html/connecting.html.

Я рекомендую вам взглянуть на образец Spring Social Showcase по адресу https://github.com/SpringSource/spring-social-samples.. Он использует ConnectController для обработки соединений Twitter и Facebook. И, конечно же, вы можете задавать вопросы на форуме Spring Social по адресу http://forum.springsource.org/forumdisplay.php?82-Social.

...