0

我一直在关注@Dave Syers 关于Spring boot 和 oAuth2的优秀教程

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

但现在我正在尝试创建一个“注册”页面。例如,在 stackoverflow 上,有一个使用 facebook 注册的选项,因此您的详细信息会从 facebook 发送到 Stackoverflow.com。如何使用 oAuth2 执行此操作?我可以通过 spring-social 做到这一点,但我无法用直接的 oauth2 方法来解决如何做到这一点。

请帮忙?

4

2 回答 2

4

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

我所要做的就是向返回过滤器 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
}

}

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

于 2016-08-27T08:54:30.200 回答
2

制作集成的 jwt-oauth2-signup-login 很困难。有一些简单的方法: 1、使用satellizer-spring-boot,或者satellizer。2、使用spring social。3、将jwt添加到spring oauth2作为单独的provider:

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

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

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

1、下载一个标准的spring boot jwtFilter.java文件,放到你的config目录下。

2、为注册新用户做一个控制器。3、做一个/login 来返回jwt token。

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

4、创建一个注册链接到/register。和 /login 的登录标签链接。

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

于 2016-08-25T02:25:09.830 回答