使用Spring Social无法正常工作的Twitter登录

时间:2016-04-25 07:23:43

标签: spring twitter spring-security spring-social

我有一个使用Oauth2身份验证(密码授予类型)的Spring Boot应用程序。我现在需要支持Facebook和Twitter登录。

我正在使用自定义TokenGranter来允许客户端向我发送Facebook访问令牌或Twitter使用者ID和秘密,以便他们可以登录到我的服务器应用程序并接收我生成的OAuth2 access_token。我使用FacebookConnectionFactory

为Facebook工作
Connection<Facebook> connection = facebookConnectionFactory.createConnection(new AccessGrant(providerToken));

通过连接,我获得了Facebook的用户ID:

String providerUserId = connection.getKey().getProviderUserId();

使用此ID,我搜索我的UserRepository中是否有这样的用户,如果有,我登录用户:

CustomUserDetails userDetails = new CustomUserDetails(user);
userAuth = new SocialAuthenticationToken(connection, userDetails,
                                                 null, userDetails.getAuthorities());
SecurityContextHolder.getContext().setAuthentication(userAuth);

一切正常。对Twitter做同样的事情:

Connection<Twitter> connection = twitterConnectionFactory.createConnection(new OAuthToken(providerToken, tokenSecret));

给我这个例外:

Unable to connect with Twitter: Authorization is required for the operation, 
but the API binding was created without authorization.

我觉得奇怪的是,使用具有相同应用ID和密码以及消费者和消费者秘密的TwitterTemplate确实有效。

TwitterTemplate twitterTemplate = new TwitterTemplate(...);
UserOperations userOperations = twitterTemplate.userOperations();
AccountSettings accountSettings = userOperations.getAccountSettings();

我需要Connection<Twitter>的{​​{1}}对象。我做错了什么?

1 个答案:

答案 0 :(得分:0)

愚蠢的错误,我有:

@Value("spring.social.twitter.app-id")
private String twitterAppId;
@Value("spring.social.twitter.app-secret")
private String twitterAppSecret;

代替:

@Value("${spring.social.twitter.app-id}")
private String twitterAppId;
@Value("${spring.social.twitter.app-secret}")
private String twitterAppSecret;

所以我把文字spring.social.twitter.app-id而不是属性的值。