2016-04-25 65 views
0

我有一个工作春季启动应用程序使用Oauth2身份验证(密码授予类型)。我现在需要支持Facebook和Twitter登录。推特登录与春季社会不工作

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

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. 

我感到奇怪的是,使用TwitterTemplate具有相同的应用程序ID和秘密和消费者以及消费者的秘密确实工作。

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

我需要为SocialAuthenticationTokenConnection<Twitter>对象。我究竟做错了什么?

回答

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而不是属性的值。