使用OAuth获取Google SpreadsheetService

时间:2012-06-03 14:07:45

标签: google-app-engine oauth gdata

我正在开发GWTP项目,以下方案在我的本地开发模式下成功测试:

  1. 通过OpenID和OAuth进行身份验证和授权
  2. 将GoogleOAuthParameters对象保存到HttpSession。
  3. 另一个操作处理程序重用会话中存储的GoogleOAuthParameters来获取SpreadsheetService对象。
  4. 使用SpreadsheetService处理GDoc中的电子表格。
  5. 但是,当部署到App Engine时,无法从GDoc读取任何内容,也没有任何错误/警告,并且返回的列表始终为空。

    spreadsheetService = new SpreadsheetService("test");
    GoogleOAuthParameters oauthParameters = (GoogleOAuthParameters)sessionProvider.get().getAttribute(HttpSessionProvider.PARAM_OAUTH_PARAMETERS);
    spreadsheetService.setOAuthCredentials(oauthParameters, new OAuthHmacSha1Signer());
    oauthParameters.setScope(SCOPE_SPREADSHEET);
    

    如果我在初始化SpreadsheetService时明确使用如下的用户名/密码,我可以从GDoc检索数据。

    SpreadsheetService sService = new SpreadsheetService("test");
    sService.setUserCredentials("username", "password");
    

    我正在使用App Engine SDK 1.6.6和gdata-spreadsheet-3.0。 请告知我做错了什么。 谢谢!

2 个答案:

答案 0 :(得分:0)

该文档适用于.Net,而非Java。如果你想用Java开发,我在这里找到了一个解决方案:Sharing authentication/token between Android Google Client API and SpreadSheet API 3.0

  String token = GoogleAuthUtil.getToken(
          this,
          this.accountName,
          this.scopes);

  SpreadsheetService service = new SpreadsheetService("my-service-name");

  service.setProtocolVersion(SpreadsheetService.Versions.V3);
  service.setHeader("Authorization", "Bearer " + token);

请注意,这不适用于设置令牌并为我生成401:

  // BAD CODE
  service.setUserToken(token);
  // BAD CODE

答案 1 :(得分:-2)

该文档包含Java中的完整示例,说明如何使用所有受支持的机制执行身份验证。建议使用OAuth 2.0,其解释如下:

https://developers.google.com/google-apps/spreadsheets/#performing_oauth_20