2016-09-21 42 views
0

我有一个客户端/服务器游戏(iOS客户端,Java服务器),其中玩家帐户绑定到电子邮件地址。客户允许使用其各自的登录SDK在Google,Facebook和Twitter上登录。如何验证Java服务器中的Twitter OAuth凭证(包括电子邮件)

为了防止客户欺骗错误的电子邮件地址,我通过SSL将它们发送到服务器端来验证oauth令牌,并使用用户的凭据来验证它们确实拥有该电子邮件地址。

对于Google和Facebook,令牌验证(以及获取关联的电子邮件)是一个非常简单的REST调用。但是Twitter需要你创建一个签名的请求,结果很复杂且容易出错。幸运的是,有一个开源的客户端库twitter4j,它使我能够用几行代码完成它。

搞清楚如何使用twitter4j完成这项任务有点棘手,所以我在这里记录它。

回答

1

你需要这些进口:

import twitter4j.Twitter; 
import twitter4j.TwitterFactory; 
import twitter4j.conf.Configuration; 
import twitter4j.conf.ConfigurationBuilder; 

当您注册您的Twitter的API访问的应用程序,它们提供消费者API密钥和消费者API秘密,以确定您的iOS应用。您需要以某种方式在您的Java服务器上使用这些。这是最简单的把它们直接进入源代码:

String consumerApiKey = "arglebarglearglebargle"; // oauth_consumer_key 
String consumerApiSecret = "tHiSisas3cReTc0nSUm3rAp1Keypr0v1d3Dbytw1tt3r"; 

然后,你需要从iOS应用发送对您的OAuth认证:

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(); 

现在您可以通过Twitter对象进行Twitter API调用。在我的情况下,我打了一个电话来验证oauth凭证并获取用户的电子邮件,以便我可以根据播放器数据库进行检查:

twitter4j.User user = twitter.verifyCredentials(); 
String email = user.getEmail(); 
...