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