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>
对象。我究竟做错了什么?