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();
我需要爲SocialAuthenticationToken
的Connection<Twitter>
對象。我究竟做錯了什麼?