2016-04-25 67 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而不是屬性的值。