将Facebook身份验证集成到FacebookApp中的Spring Security中

时间:2011-06-20 09:05:00

标签: java security facebook spring-mvc spring-security

我有一个使用用户名/密码SpringSecurity配置的工作Web应用程序。现在我想把它移植到一个简单的Facebook应用程序中。出于某种原因,我想通过使用返回的facebook访问令牌进行身份验证,以及保留用户名密码验证器。

详细说明,我会检查用户的facebook访问令牌进行身份验证,返回:

https://graph.facebook.com/oauth/access_token?client_id=[my_api_key]&redirect_uri=[my_redirect_uri]&client_secret=[my_api_secret]&code=[code]

用户无需提供任何用户名/密码,因为他们已经使用Facebook登录。但我想保留(用户名/密码)spring安全配置,以便用户可以在我的原始网站上登录。

SpringSecurity是否支持这种身份验证?如果答案是肯定的,我想知道如何做到这一点?我是否需要编写自定义身份验证提供程序来执行此操作?

UPDATE :最后,我们自定义了SpringSecurity的身份验证方式,以便通过扩展UsernamePasswordAuthenticationFilter(将其声明为formLoginFilter)接受access_token作为身份验证参数

2 个答案:

答案 0 :(得分:9)

Spring还有另一个项目:Spring Social非常有用。

它支持多种社交网络。我成功地用它来验证Facebook。然后我编写了一个小函数来将Facebook用户登录到我的Spring Security上下文中:

protected void authenticate(UserDTO user){
    SecurityContextHolder.getContext().getAuthentication();
    UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(user.getUsername(), user.getPassword());
    token.setDetails(new WebAuthenticationDetails(getRequest()));
    Authentication authentication = authenticationManager.authenticate(token);
    SecurityContextHolder.getContext().setAuthentication(authentication);
}

UserDTO需要有一个用户名和(生成的)密码属性,需要保存在数据库中,以便user-service(来自Spring安全)可以检索它。

答案 1 :(得分:5)

你正在思考正确的道路......

这是一篇关于具有spring security的多个身份验证提供程序的文章(例如,一个表单登录,一个facebook登录和一个open-id登录)。

http://thoean.com/programming/java/multiple-authentication-provider-with-spring-security/

希望有所帮助:D