Facebook使用现有的用户访问令牌与Spring社交

这是我现在有的:

  • Spring REST服务,其中许多API需要用户进行身份validation
  • “注册”API(/ api / v1 / register)
  • 采用用户名/密码(/ api / v1 / login)的“login”API
  • 依靠Spring Social和Spring Security创buildUser Connection并在(/ auth / facebook)中login用户的'Facebook Login'API

我的问题是,我希望这些API被多个客户端使用,但Facebooklogin的方式现在,它不适用于移动(在网站上很好的作品)。

这是移动场景:

  • 我使用Facebook的iOS SDK来请求用户的许可
  • Facebook返回一个用户访问令牌
  • 我想发送我的后端服务这个令牌,并让Spring Social接受它,创build用户连接等。

可以这样做吗? 或者我将不得不写我自己的API来坚持用户连接?

感谢任何帮助!

我有完全相同的问题,这是我的工作原理。 你可能有一个SocialConfigurer与以下内容:

@Configuration @EnableSocial public class SocialConfig implements SocialConfigurer { @Autowired private DataSource dataSource; @Bean public FacebookConnectionFactory facebookConnectionFactory() { FacebookConnectionFactory facebookConnectionFactory = new FacebookConnectionFactory("AppID", "AppSecret"); facebookConnectionFactory.setScope("email"); return facebookConnectionFactory; } @Override public void addConnectionFactories(ConnectionFactoryConfigurer cfConfig, Environment env) { cfConfig.addConnectionFactory(facebookConnectionFactory()); } @Override public UserIdSource getUserIdSource() { return new AuthenticationNameUserIdSource(); } @Override public UsersConnectionRepository getUsersConnectionRepository(ConnectionFactoryLocator connectionFactoryLocator) { return new JdbcUsersConnectionRepository(dataSource, connectionFactoryLocator, Encryptors.noOpText()); } // Other @Bean maybe ... } 

从这里,你可以做的是,在一个Controller / RestController中,为你的令牌发送一个RequestParam映射到你的服务器:

 @Autowired private FacebookConnectionFactory facebookConnectionFactory; @Autowired private UsersConnectionRepository usersConnectionRepository; @RequestMapping(value = "/my-facebook-url", method = RequestMethod.POST) public String fb(@RequestParam String token) { AccessGrant accessGrant = new AccessGrant(token); Connection<Facebook> connection = facebookConnectionFactory.createConnection(accessGrant); UserProfile userProfile = connection.fetchUserProfile(); usersConnectionRepository.createConnectionRepository(userProfile.getEmail()).addConnection(connection); // ... return "Done"; } 

有用的参考

  • UsersConnectionRepository
  • ConnectionRepository