使用Google Spreadsheet API中的OAuth 2.0授权请求

时间:2011-11-01 09:41:28

标签: oauth google-sheets google-data-api google-spreadsheet-api

我正在尝试创建一个PHP网页,需要从我的域中的谷歌电子表格中读取一些数据(我使用的是Google Apps免费版)。

要阅读的电子表格是非公开的,但我的域中的某些人可以看到。由于它是非公开的,我知道即使我使用API​​来读取它也会有一些身份验证和授权。

我找到了这个页面但有些东西我不明白: http://code.google.com/intl/zh-TW/apis/spreadsheets/data/3.0/developers_guide.html#Auth

它说我们应该使用OAuth 2.0协议,这没关系。但它也说在授权过程中,“Google向用户显示OAuth对话框,要求他们授权您的应用程序请求他们的部分数据。”

我的网页会显示从电子表格中读取的一些数据。因此,只要有人访问我的网页,它就会向电子表格所有者显示一个对话框,要求获得许可?这是什么意思?

非常欢迎任何建议。

4 个答案:

答案 0 :(得分:4)

您实际要完成的是服务器和Google之间的服务器到服务器身份验证。

这样,当访问者进入您的网页时,您将从您自己的电子表格中获取数据,而无需任何第三方参与。

我有可能在Google Service Accounthere

中找到您要找的内容

另外, 另一个解决方案(更容易实现,但可能有一些挫折)是将oauth 2.0协议与您的Google开发帐户一起使用(从Google Console API检索)。

  1. 如果您还没有,请创建Google Dev帐户(Google控制台API)
  2. 使用“离线”授权为您的应用生成访问/刷新令牌 - 这意味着即使您未使用电子表格帐户登录,也可以使用您的开发帐户向电子表格帐户发出API请求。
  3. 保存您生成的刷新令牌并使用它一遍又一遍地生成访问令牌(访问令牌持续1小时)。
  4. 刷新令牌不应该过期,但如果遇到这种情况,你可以随时再次生成它并用新的令牌取而代之,并继续使用它生成访问令牌。

    如果您的刷新令牌失效,您将不得不手动更换它,因为它需要您重新授予对您的开发帐户的访问权限才能访问您的电子表格帐户。

    我希望这有点帮助。

    MENY

答案 1 :(得分:4)

Google& OAuth教程:  我搜索了几天找到这个。它比任何其他OAuth样式教程要好得多  我用过。它用于连接Google Docs / google驱动器。

Python示例在这里,还可以看到java等的其他示例:  https://developers.google.com/drive/examples/python

注意您需要为其添加刷新令牌。但这可以像你期望的那样工作。

另外要连接到电子表格使用:

          SpreadsheetService service =
                  new SpreadsheetService("MySpreadsheetIntegration-v1");

          service.setHeader("Authorization", "Bearer " + accessToken);

答案 2 :(得分:2)

是的,OAuth协议意味着当您尝试从其他方面(谷歌)询问受保护的资源时,您的网站应该将您的用户重定向到其他方的网站,向他显示谷歌的登录/密码对话框,并要求确认该用户同意允许您的网站使用来自其他网站的用户资源(在您的情况下为谷歌)。 这就是OAuth的工作方式

并且google需要您的用户凭据,因为Google不确定该用户是否恰好是此用户(例如,如果他没有任何Cookie)

答案 3 :(得分:2)

您可以使用新提供的oauth2流程

//flow use httpTransport, clientSecrets, json factory and datastore factory
val flow = new GoogleAuthorizationCodeFlow
  .Builder(httpTransport,JSON_FACTORY,clientSecrets,SCOPES)
  .setDataStoreFactory(datastoreFactory)
  .build()

// authorize
val credential=new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user")

并将其与您的gdata服务一起使用:

val service:SpreadsheetService=new SpreadsheetService("SpreadsheetIntegration") 
 service.setOAuth2Credentials(credential)

scala中的完整示例:https://github.com/spaced/spreadsheet-oauth2-example