Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Facebook和spring OAuth2_Java_Spring_Spring Boot_Spring Oauth2_Spring Social Facebook - Fatal编程技术网

Java Facebook和spring OAuth2

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

我在spring引导应用程序上启用了OAuth2(AuthorizationServer)

我想在facebook用户从移动应用程序传递访问令牌时使用REST请求对其进行身份验证

我有一个接收facebook令牌的控制器

@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,是的,上述方法是错误的,永远不会起作用。使用这个指南,一旦你了解了它,它就相当简单了