Spring 开机,oAuth2 注册 facebook

Spring boot, oAuth2 sign up with facebook

我一直在关注@Dave Syers 关于 Spring boot and oAuth2

的精彩教程

我已经能够创建一个登录功能,因此受保护的资源需要先登录 facebook 才能访问。

但现在我正在尝试创建一个 "sign up" 页面。例如,在 Whosebug 上,有一个使用 facebook 注册的选项,因此您的详细信息将从 facebook 发送到 whosebug.com。如何使用 oAuth2 执行此操作?我能够使用 spring-social 做到这一点,但我无法全神贯注于如何使用直接的 oauth2 方法做到这一点。

请帮忙?

集成jwt-oauth2-signup-login很难。有一些简单的方法: 1、使用satellizer-spring-boot,即satellizer。 2、使用spring社交。 3,将jwt添加到spring oauth2作为单独的提供者:

这是处理 3 的方法: 我还没有使用 signup+oauth2(因为我喜欢 spring social 并且它可以执行相同的功能),但理论上它可以非常简单地完成并且可以按如下方式完成:

首先,当用户从facebook登录(在facebook上注册也会进入登录页面)时,只需导入用户信息并将信息写入用户模型即可。可以用一个控制器和一个视图来完成。

在首页,很容易让用户选择登录,或者注册一个新帐户:因为Spring boot支持多个过滤器和多个AuthenticationProvider,这意味着你可以使用两个过滤器,一个用于oauth2 ,和另一个(jwt 本地服务器)过滤器用于本地服务器注册。

1,下载一个标准的spring引导jwtFilter.java文件并将其放入您的配置目录。

2,制作一个注册新用户的控制器。 3, /login 到 return jwt token.

3、制作两个过滤器,一个用于oauth2,一个用于本地jwt。

4,注册link到/register。和登录标签 link 到 /login.

ps:您可以复制标准 spring boot jwt 项目中的所有行,这里是一个:https://github.com/mrmodise/senepe

答案比我想象的要简单。我需要做的就是将我的自定义 AuthenticationSuccessHandler 添加到过滤器中:

我所要做的就是向 returns 过滤器 ssoFilter()

的方法添加一个 AuthenticationSuccessHandler 句柄
@Autowired
private CustomAuthenticationSuccessHandler customAuthenticationSuccessHandler;


private Filter ssoFilter() {
    OAuth2ClientAuthenticationProcessingFilter facebookFilter = new OAuth2ClientAuthenticationProcessingFilter("/login/facebook");
    OAuth2RestTemplate facebookTemplate = new OAuth2RestTemplate(facebook(), oauth2ClientContext);
    facebookFilter.setRestTemplate(facebookTemplate);
    facebookFilter.setTokenServices(new UserInfoTokenServices(facebookResource().getUserInfoUri(), facebook().getClientId()));
    facebookFilter.setAuthenticationSuccessHandler(customAuthenticationSuccessHandler);
    return facebookFilter;
} 

而我的 CustomAuthenticationSuccessHandler 只是一个扩展 AuthenticationSuccessHandler 的组件

@Component
public class CustomAuthenticationSuccessHandler implements AuthenticationSuccessHandler {

@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response,
                                    Authentication authentication) throws IOException, ServletException {
    //implementation
}

}

所以在我的注册页面中,我可以简单地使用相同的登录操作,但在成功处理程序中我创建了用户并将她存储在数据库中