春季启动,oAuth2注册Facebook

时间:2016-08-21 18:20:06

标签: spring-boot spring-social-facebook spring-oauth2

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

的优秀教程

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

但是现在我正在努力创建一个"注册"页。例如,在stackoverflow上,有一个注册Facebook的选项,因此您的详细信息将从Facebook发送到Stackoverflow.com。如何使用oAuth2执行此操作?我能够用spring-social做到这一点,但是我不能用直接的oauth2方法来解决这个问题。

请帮帮忙?

2 个答案:

答案 0 :(得分:4)

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

我所要做的就是在返回Filter 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
}

}

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

答案 1 :(得分:2)

进行集成的jwt-oauth2-signup-login很难。有一些简单的方法: 1,使用卫星 - 弹簧 - 开机或卫星。 2,使用春天社交。 3,将jwt添加到spring oauth2作为单独的提供者:

这是如何处理3: 我还没有使用注册+ oauth2(因为我喜欢spring social,它可以做同样的功能),但理论上它可以很容易地完成,可以按照以下方式完成:

首先,当用户登录(在Facebook上注册也将导致登录页面)表格Facebook时,只需导入用户的信息并将信息写入用户模型。它可以通过控制器和视图来完成。

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

1,下载一个标准的spring boot jwtFilter.java文件并将其放在你的config目录中。

2,制作一个注册新用户的控制器。 3,创建/ login以返回jwt令牌。

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

4,进行/注册注册链接。和登录标签链接到/ login。

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