0

再次问候善良和仁慈的互联网人。

我正在阅读 Kathryn Hurley 关于将 OAuth 与 Fusion Tables 结合使用的文章(链接在这里:OAuthandFusionTables),并且还在研究 Odi 对我之前关于这个主题的问题的回答(链接在这里:我以前的问题),以及已阅读并重新阅读了 google-api-javascript-client 库参考(此处链接:gapi 参考),但我仍然对 Fusion Tables、oAuth2.0 和 google-api-javascript-client 的明显行为感到非常困惑Google 提供的 Javascript API 示例中显示的库(此处链接:Google Example Javascript gapi with Fusion Tables)。

对于 Google Javascript API 示例:

A.) 为什么使用 gapi-client javascript 库进行表插入和更新的 Fusion Table oAuth 请求实际上不使用 sql 请求字符串中返回的 oAuth 令牌?

...或者换一种说法:B.) 当使用 google-api-javascript-client 库时,访问令牌有什么实际好处?...根据 Kathry Hurley 为“应用程序 2 -创建一个允许用户访问自己的 Fusion Table 数据的应用程序”?

...或者换一种说法:C.)浏览器会话和 Google Fusion Table 服务器之间的 https ssl 连接是否实际上是“授权”并允许访问?...这是某种类型的 ssl 连接(其中我真的不明白)......根本不是访问令牌允许访问,并且令牌只是一个返回的“标志”,表示使用gapi客户端时会话良好/连接/正常?

或者 D.) 我只是产生了幻觉吗?......并且没有正确看到 Javascript API 示例和/或 gapi 客户端库的内容?

以下是更多细节:

首先尝试 Javascript API 示例(此处再次链接:Google Example Javascript gapi with Fusion Tables)...这真的很好,对我来说理解起来很困难。

第二次尝试我对这个 API 示例的“hack”,它会引发一堆警报(这样我就可以跟踪正在发生的事情),并将 SQL 字符串写入屏幕:(链接在这里:我的示例 hack Google gapi 示例

从我对示例的修改中可以看出,对于“创建表”和“插入数据”,访问 authToken 不是提交给 Fusion Tables 的 sql 字符串的一部分:示例:

{"b":{"path":"/fusiontables/v1/query","method":"POST","params":{},"headers":{"Content-Type":"application/x- www-form-urlencoded","Content-Length":105},"body":"sql=INSERT%20INTO%201zkJhx0XdI3SsguI2Pided-m28mNSzI0MsMKNhY0%20(Name%2C%20Age)%20VALUES%20('test'%2C% 204)"}}

上述字符串中没有 auth 访问令牌。

但是根据 Kathry Hurley 的文章(关于 OAuth 2.0 和 Fusion Tables),以下是步骤,特别注意第 7 步:

0 注册您的应用程序

1 位用户访问您的 Web 应用程序

2 您的网络应用程序将用户重定向到 Google 授权页面

3 用户授予您的 Web 应用程序访问权限

4 Google 将用户重定向回您的 Web 应用程序并返回授权码

5 您的应用程序向 Google 请求访问令牌和刷新令牌 6 Google 返回访问令牌、刷新令牌和访问令牌到期

7 访问令牌可用于对Fusion Tables 的所有后续请求,直到令牌过期

8 当访问令牌过期时,刷新令牌用于请求新的访问令牌

上面的第 7 步似乎规定访问令牌用于后续请求。...并且提供的示例代码显示了包含的访问令牌:

urllib.urlencode({
      'sql': 'SHOW TABLES',
      'access_token': access_token
  }),

Soooo ...我对 Google 示例中 gapi.client 库的明显行为的差异感到困惑(在执行插入或更新时,它显然没有在 sql 请求字符串上提交访问令牌)和写在访问 Fusion Tables 时应该如何提交访问身份验证令牌。

也许有些人可以提供一些启示?提前致谢

4

1 回答 1

1

访问令牌很重要,它实际上用于验证后续请求,因此您只需执行一次(即直到令牌过期,即 1 小时后的情况)。

如果您自己发送请求,通过向https://www.googleapis.com/fusiontables/v1/query发送 HTTP POST 请求,您必须提供访问令牌作为参数。但这不是这里的情况,您通过 gapi-javascript 库发送令牌,该库为您处理 HTTP 内容。

但是那里的访问令牌呢?这很简单:一旦您使用该gapi.auth.authorize()方法进行身份验证(请参阅Google gapi 示例),该库会记住访问令牌并将其用于所有后续调用。您可以使用调试控制台检查这一点,并在gapi.auth.getToken()查看 Google 示例时输入:

gapi 访问令牌的屏幕截图

于 2012-08-04T22:17:38.667 回答