使用现有用户访问令牌使用 Spring Social 登录 Facebook
Posted
技术标签:
【中文标题】使用现有用户访问令牌使用 Spring Social 登录 Facebook【英文标题】:Facebook Login with Spring Social using Existing User Access Token 【发布时间】:2015-06-25 01:33:56 【问题描述】:这是我目前拥有的:
许多 API 要求对用户进行身份验证的 Spring REST 服务 “注册”API (/api/v1/register) 采用用户名/密码 (/api/v1/login) 的“登录”API “Facebook 登录”API 依赖于 Spring Social 和 Spring Security 来创建用户连接并将我的用户登录 (/auth/facebook)我的问题是我希望这些 API 被多个客户端使用,但是 Facebook 登录现在的方式在移动设备上效果不佳(在网站上效果很好)。
以下是移动场景:
我使用 Facebook 的 ios SDK 向用户请求许可 Facebook 返回用户访问令牌 我想向我的后端服务发送这个令牌并让 Spring Social 接受它,创建用户连接等。这可以吗?还是我必须编写自己的 API 来保持用户连接?
感谢任何帮助!
【问题讨论】:
【参考方案1】:我遇到了完全相同的问题,这就是我如何使它工作的。您可能在某个地方有一个 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【讨论】:
嗨@Philippe!您是否使用过 spring-social-facebook 版本 2?谢谢 @troig,没错。我也有 spring-social-core/web/config/security:1.1.2 你有什么问题吗? 再次感谢@Philippe!正如你所说,它可以将 spring-social-core 版本升级到 1.1.2。我以前的版本(1.1.0)有一个错误。 +1 嗨菲利普。不幸的是,我不能接受它,因为我没有提出问题。也许@AlexG 可以考虑一下。再次感谢,在我的情况下它工作得很好 您可以使用 FacebookTokenAuthenticationFilter,它扩展了 Spring Social Security API 的 SocialAuthenticationFilter。 ***.com/questions/35911723/…以上是关于使用现有用户访问令牌使用 Spring Social 登录 Facebook的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot 安全性 - 允许使用过期 JWT 令牌的用户请求
ADAL使用AcquireTokenAsync和现有JWT令牌续订令牌
:REST spring security - 手动验证新用户并获取访问令牌