将 Facebook Authentication 集成到 FacebookApp 中的 Spring Security

Posted

技术标签:

【中文标题】将 Facebook Authentication 集成到 FacebookApp 中的 Spring Security【英文标题】:Integrate Facebook Authentication into Spring Security in FacebookApp 【发布时间】:2011-09-18 12:45:56 【问题描述】:

我有一个使用用户名/密码 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 是否支持这种身份验证?如果答案是肯定的,我想知道如何做到这一点?我需要编写自定义身份验证提供程序吗?

更新:最后我们自定义了SpringSecurity的认证方式,通过扩展UsernamePasswordAuthenticationFilter(声明为formLoginFilter)接受access_token作为认证参数

【问题讨论】:

@HaveAGuess:我已经更新了我在问题中的答案。 【参考方案1】:

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 安全性)可以检索它。

【讨论】:

Bart Vangeneugden 它不工作...显示错误..我也包括了 spring api..是否还有任何要添加的 api【参考方案2】:

你的想法是正确的......

这是一篇关于使用 Spring Security 的多个身份验证提供程序的文章(例如,一个表单登录、一个 facebook 登录和一个带有 open-id 的登录)。

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

希望对你有所帮助:D

【讨论】:

以上是关于将 Facebook Authentication 集成到 FacebookApp 中的 Spring Security的主要内容,如果未能解决你的问题,请参考以下文章

Spring Social Authentication Filter for Stateless REST Endpoints 使用 Facebook Token 进行身份验证

Laravel Socialite 与 Facebook 未登录

Facebook 身份验证教程缺失的部分

Facebook 的 FirebaseUI 身份验证不起作用

ASP.NET Web API Authentication.GetExternalLoginInfoAsync 始终返回 null

Facebook OAuth 2.0“代码”和“令牌”