Как проверить учетные данные Twitter OAuth (включая электронную почту) на сервере Java
У меня есть игра клиент / сервер (клиент iOS, сервер Java), в которой учетные записи игроков привязаны к адресам электронной почты. Клиент позволяет войти через Google, Facebook и Twitter, используя соответствующие SDK для входа.
Чтобы клиенты не могли подделать неправильный адрес электронной почты, я проверяю токены oauth, отправляя их по SSL на серверную часть и используя учетные данные пользователя для проверки того, что они действительно владеют этим адресом электронной почты.
Для Google и Facebook проверка токена (и получение соответствующей электронной почты) была довольно простым вызовом REST. Но Twitter требует, чтобы вы создали подписанный запрос, который оказывается сложным и подверженным ошибкам. К счастью, есть клиентская библиотека с открытым исходным кодом, twitter4j, которая позволила мне сделать это всего за несколько строк кода.
Выяснить, как использовать twitter4j для этой задачи, было немного сложно, поэтому я документирую это здесь.
1 ответ
Вам понадобится этот импорт:
import twitter4j.Twitter;
import twitter4j.TwitterFactory;
import twitter4j.conf.Configuration;
import twitter4j.conf.ConfigurationBuilder;
Когда вы регистрируете свое приложение для доступа к API Twitter, они предоставляют вам ключ API потребителя и секрет API потребителя, чтобы идентифицировать ваше приложение iOS. Они вам понадобятся на вашем Java-сервере. Проще всего поместить их прямо в исходный код:
String consumerApiKey = "arglebarglearglebargle"; // oauth_consumer_key
String consumerApiSecret = "tHiSisas3cReTc0nSUm3rAp1Keypr0v1d3Dbytw1tt3r";
Затем вам понадобятся учетные данные oauth, отправленные из приложения iOS:
String accessToken = "myUs3rs0aUthAcc355t0k3n";
String accessTokenSecret = "sdflkjasdflkjasdlfkjasdlfkjasldkfjlasdkfjldf";
Настройте twitter4j с вашими учетными данными:
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.setOAuthConsumerKey(consumerApiKey);
builder.setOAuthConsumerSecret(consumerApiSecret);
builder.setOAuthAccessToken(accessToken);
builder.setOAuthAccessTokenSecret(accessTokenSecret);
builder.setIncludeEmailEnabled(true);
Configuration config = builder.build();
TwitterFactory factory = new TwitterFactory(config);
Twitter twitter = factory.getInstance();
Теперь вы можете выполнять вызовы API Twitter через объект Twitter. В моем случае я делаю один вызов, чтобы проверить учетные данные oauth и получить электронную почту пользователя, чтобы проверить ее по базе данных игрока:
twitter4j.User user = twitter.verifyCredentials();
String email = user.getEmail();
...