【问题标题】:spring social facebook accessToken with 400 error春季社交facebook accessToken出现400错误
【发布时间】:2014-12-05 11:34:17
【问题描述】:

嗨,请帮助我是 spring social 的新手,我在从 AUTHORIZATION_CODE 获取访问令牌时收到 400 错误。

我的代码如下

@RequestMapping(value = "/facebook", method = RequestMethod.POST, produces = "application/json")
  @ResponseBody
  public Object getFacebookLoginPage(@RequestBody SocialCommand socialCommand) throws Exception {
      loggerService.debug("In ShareController", "getFacebookLoginPage method for facebook", "returns the JSON response for the input socialCommand");
      Result result = new Result();
      result.status = "OK";
      dataObject = socialCommand;
      FacebookConnectionFactory connectionFactory = new FacebookConnectionFactory(msgprop.getProperty("facebook.appId"), msgprop.getProperty("facebook.appSecrete"), msgprop.getProperty("facebook.namespace"));
      oAuth2Operations = connectionFactory.getOAuthOperations();
      OAuth2Parameters params = new OAuth2Parameters();
      params.setScope(msgprop.getProperty("facebook.scope"));
      params.setRedirectUri(msgprop.getProperty("facebook.redirectURI"));
//        params.set("Content-Type", MediaType.MULTIPART_FORM_DATA.getType());
      String authorizeUrl = oAuth2Operations.buildAuthorizeUrl(GrantType.AUTHORIZATION_CODE, params);
      System.out.println(authorizeUrl);
      SuccessResponse successResponse = new SuccessResponse();
      successResponse.resultObj = authorizeUrl;
      result.response = successResponse;
      return result;

  }

而回调控制器如下

  @RequestMapping(value = "/facebook/callback", params = "code", method = RequestMethod.GET)
  public Object faceBookCallback(@RequestParam(value = "code") String callBackCode, Model model) throws IOException {
      loggerService.debug("In ShareController", "faceBookCallback method for facebook", "returns the JSON response for the input socialCommand");
      MultiValueMap<String, String> formData = new LinkedMultiValueMap<String, String>();
      formData.add("client_id", msgprop.getProperty("facebook.appId"));
      formData.add("client_secret", msgprop.getProperty("facebook.appSecrete"));
      formData.add("scope", msgprop.getProperty("facebook.scope"));
      formData.add("redirect_uri", msgprop.getProperty("facebook.redirectURI"));
      formData.set("grant_type", "authorization_code");
      formData.set("Content-Type", MediaType.MULTIPART_FORM_DATA.getType());
      AccessGrant accessGrant = oAuth2Operations.exchangeForAccess(callBackCode, msgprop.getProperty("facebook.redirectURI"), formData);
      System.out.println(accessGrant.getAccessToken());
      appStatus.getActivityId();
      SocialCommand socialCommand = (SocialCommand) dataObject;
      socialCommand.setAppType("facebook");
      socialCommand.setAccessToken(accessGrant.getAccessToken());
      getImageLocation(socialCommand);

      model.addAttribute("activityId", appStatus.getActivityId());

      return "backToViewDetails";
  }

oAuth2Operations.exchangeForAccess 给出 400 错误请求

【问题讨论】:

    标签: spring-social


    【解决方案1】:

    我注意到了几件事......

    首先,为什么要编写自己的控制器来执行 OAuth 舞蹈,而不是使用 Spring Social 提供的 ConnectController? ConnectController 可以为您处理所有重定向,并且从一开始就是 Spring Social 的一部分。 Spring Social Showcase (https://github.com/spring-projects/spring-social-samples/tree/master/spring-social-showcase) 是一个使用 ConnectController 的项目示例。

    即使如此,假设您有充分的理由编写自己的连接控制器,我在 getFacebookLoginPage() 中看不到执行实际重定向到 Facebook 的任何内容,因此我只能假设这发生在未显示的代码中。然后当重定向从 Facebook 返回时,我很困惑为什么在调用 exchangeForAccess() 之前设置内容类型和大部分参数。 (即便如此,您正在设置看起来像请求标头的内容,但您正在将其设置为表单参数......不是必需的,但也不是您的想法。)

    再次,我鼓励您看看 ConnectController (https://github.com/spring-projects/spring-social/blob/master/spring-social-web/src/main/java/org/springframework/social/connect/web/ConnectController.java)。它可能会做你需要它做的事情。即使您仍然觉得需要编写自己的控制器,您也可以查看 ConnectController 的工作原理,作为如何编写自己的控制器的指南。

    【讨论】:

    • 连接控制器是否可以用于所有社交网站,如 facebook、twitter、tumblr 和 linkedIn 等?
    • 在这里,我的社交控制器应该能够使用从 iphone、android 和 windows 应用程序生成的访问令牌发布/读取操作,这会对我的控制器进行休息调用。请你帮我配置我的社交控制器的更好的方式。
    猜你喜欢
    • 2014-09-21
    • 1970-01-01
    • 1970-01-01
    • 2015-07-07
    • 2017-04-10
    • 2015-01-07
    • 2016-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多