我正在尝试创建一个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对话框,要求他们授权您的应用程序请求他们的部分数据。”。
我的网页会显示从电子表格中读取的一些数据。因此,只要有人访问我的网页,它就会向电子表格所有者显示一个对话框,要求获得许可?这是什么意思?
非常欢迎任何建议。
答案 0 :(得分:4)
您实际要完成的是服务器和Google之间的服务器到服务器身份验证。
这样,当访问者进入您的网页时,您将从您自己的电子表格中获取数据,而无需任何第三方参与。
我有可能在Google Service Account和here
中找到您要找的内容另外, 另一个解决方案(更容易实现,但可能有一些挫折)是将oauth 2.0协议与您的Google开发帐户一起使用(从Google Console API检索)。
刷新令牌不应该过期,但如果遇到这种情况,你可以随时再次生成它并用新的令牌取而代之,并继续使用它生成访问令牌。
如果您的刷新令牌失效,您将不得不手动更换它,因为它需要您重新授予对您的开发帐户的访问权限才能访问您的电子表格帐户。
我希望这有点帮助。
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)
并且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