Java Facebook和spring OAuth2
我在spring引导应用程序上启用了OAuth2(AuthorizationServer) 我想在facebook用户从移动应用程序传递访问令牌时使用REST请求对其进行身份验证 我有一个接收facebook令牌的控制器Java Facebook和spring OAuth2,java,spring,spring-boot,spring-oauth2,spring-social-facebook,Java,Spring,Spring Boot,Spring Oauth2,Spring Social Facebook,我在spring引导应用程序上启用了OAuth2(AuthorizationServer) 我想在facebook用户从移动应用程序传递访问令牌时使用REST请求对其进行身份验证 我有一个接收facebook令牌的控制器 @RequestMapping(value = "/login-with-fb", method = RequestMethod.POST) public boolean fb(@RequestParam String token) { System.out.ptint
@RequestMapping(value = "/login-with-fb", method = RequestMethod.POST)
public boolean fb(@RequestParam String token) {
System.out.ptintln("Yay i have the token"+token);
return true;
}
这就是这个控制器应该做的,我想所有的魔法都应该发生在filter中,它是由我的资源服务器注入的:
@Override
protected void configure(HttpSecurity http) throws Exception {
.antMatcher("/**").authorizeRequests()//All request are protected by default
.antMatchers("/abc/**").permitAll()
.antMatchers("/xyz/**").hasAuthority("ROLE_USER")
//We plugin facebook filter here
.and().addFilterBefore(facebookFilter(), BasicAuthenticationFilter.class);
}
最后,过滤器是什么样子的
private Filter facebookFilter() {
// What goes here? I assume we need to get the token,
// pass it to FB to validate it again then retrieve/create user
// and then somehow generate and return an OAuth2 token
// So that user can use that token instead of FB token
// to access secure content on my server
}
还是有更好的方法来实现这一点?我相信您会想阅读本教程,谢谢@EdH,但本教程介绍了如何在从web服务器而不是移动应用程序执行登录过程时实现这一点。这里的主要区别在于,在Web服务器上,您可以处理到Facebook和Facebook的重定向,但在移动应用程序上,所有这些都发生在应用程序本身上,而服务器并不知道。因此,只有在成功进行身份验证后,您才能获得令牌。我认为您仍然可以执行相同的步骤,只是希望使用@ResourceServer注释而不是SSO客户端。这将向servlet上下文添加必要的过滤器,以针对远程OAuth服务器验证提供的令牌。对REST端点的调用将需要标头中的令牌,但您可以使用相同的方式进行设置,而无需定制过滤器配置。这是我的理解,但可能我误解了。mhh有趣的是,但是有一个警告,我已经有了授权服务器(OAuth2),它使用用户名/密码为我的用户提供令牌。身份验证管理器如何知道要使用哪个授权服务器?至于相同的步骤,我假设@enableAuth2Client注释是调用所有facebook魔术所必需的…@louisamoros,是的,上述方法是错误的,永远不会起作用。使用本指南,一旦你了解了它,它非常简单。我相信你会想阅读本教程,谢谢@EdH,但本教程展示了如何在从web服务器而不是移动应用程序执行登录过程时实现这一点。这里的主要区别在于,在Web服务器上,您可以处理到Facebook和Facebook的重定向,但在移动应用程序上,所有这些都发生在应用程序本身上,而服务器并不知道。因此,只有在成功进行身份验证后,您才能获得令牌。我认为您仍然可以执行相同的步骤,只是希望使用@ResourceServer注释而不是SSO客户端。这将向servlet上下文添加必要的过滤器,以针对远程OAuth服务器验证提供的令牌。对REST端点的调用将需要标头中的令牌,但您可以使用相同的方式进行设置,而无需定制过滤器配置。这是我的理解,但可能我误解了。mhh有趣的是,但是有一个警告,我已经有了授权服务器(OAuth2),它使用用户名/密码为我的用户提供令牌。身份验证管理器如何知道要使用哪个授权服务器?至于相同的步骤,我假设@enableAuth2Client注释是调用所有facebook魔术所必需的…@louisamoros,是的,上述方法是错误的,永远不会起作用。使用这个指南,一旦你了解了它,它就相当简单了