在用户通过 google 网络应用进行身份验证后获取和使用访问令牌

Get and Use Access Tokens after user has authenticated with a google web app

我开发了一个 google apps 脚本网络应用程序,结合 MIT App Inventor 应用程序,will/should 允许用户访问他们自己的 google drive/sheets/documents.

我在通过 Appinventor 应用程序的网络组件(不是网络视图)连接到网络应用程序时遇到问题,在用户通过其设备的默认浏览器授予他们使用网络应用程序的授权后 (Chrome) .

我的 Web 应用程序已连接到 Google Cloud Console,并且已由 Google 的信任与安全团队验证。该应用程序设置为“评估该应用程序的用户”和“任何人”。我无法在 AppInventor 中使用本机 webview,因为 Google 在 2016 年将其关闭以进行身份​​验证。

Web 组件提供 GET/POST/PUT HTTP 功能,但我不知道如何获取用户的授权码和令牌以访问 Web 应用程序。 (注意;网络应用程序没有 GUI,它只是接收 GET 请求和 returns text/stringified json 一系列功能的输出。)我已经能够翻译许多 curl 示例其他情况对 web 组件有很好的效果,但对 0Auth 无效。

我已尽最大努力阅读和使用 Google 上 0Auth 的产品,但只是中途迷路了,一如既往,我所做的一切都与提供的示例或文档完全相同。

因此,我如何构建 HTTP GET URLs,所有各种授权代码和令牌都已经到位,以授权 Web 应用程序为用户工作?

一个简单的请求是这样的:

https://script.google.com/macros/s/AKfycbyZ_27nLOKi8ssX........Bz40yAbGfJt_TRswvm6zpY/exec?func=authenticate

return 文本输出“Authenticated”


使用网络浏览器 (Chrome),所有这些对于用户来说都相当简单。如果他们在浏览器中登录到他们的 Google 帐户,他们会转到为我的网络应用程序提供的 URL,他们将被要求进行身份验证,并允许我的网络应用程序访问他们的 google帐户。一旦被接受,'magic' 发生在浏览器中(任何 'magic' 发生在网络应用端?),只要他们保持登录状态,他们就可以使用浏览器发送 GET 请求(URLs 与参数)到 Web 应用程序并在他们的浏览器中查看结果 returned。快乐的日子。

在我的场景中,我没有适合上述所有功能的网络浏览器。我有一个 Web 组件,可以向 Web 服务发送 GET/POST 请求,并处理服务器响应。 (将其视为网络 'terminal')。因此,我可以(希望)构建具有所有正确内容、代码和参数的 URLs。请记住,这对用户来说必须是直截了当的,他们不会对 'back end' 活动感兴趣,他们只想使用该应用程序在他们的 google 驱动器上做事。

我猜他们至少需要在网络浏览器中执行身份验证,以便将他们的 Google 帐户与网络应用程序连接起来。然后使用 web 组件使用授权码和访问令牌连接到 web 应用程序,作为它们(他们的 google 帐户),以便 web 应用程序的操作发生在他们的 google 驱动器上。如上所述,网络应用程序设置为“访问该应用程序的用户”和“任何人”。这是我需要帮助的部分。我不明白我需要做什么才能在不使用网络浏览器的情况下将用户连接到网络应用程序。

这就是我的意思: https://developers.google.com/gdata/articles/using_cURL

您的网络应用程序和目标设置如下。

  • Web 应用程序部署为 Who has access to the app: Anyone
  • 您想让用户访问 Web 应用程序。

问题与解决方案:

在目前的情况下,使用Web Apps有以下几种情况。

  • 当用户通过各个浏览器访问Web Apps时,用户可以通过登录各个Google个账号进行访问。
  • 当你想让用户访问除浏览器之外的方法(例如curl命令和脚本)时,需要将Web Apps的GoogleApps Script项目共享给用户。

很遗憾,目前的规范似乎就是以上情况。我在 2018 年 4 月 11 日确认了此规范的更改。在此更改之前,用户可以使用访问令牌通过 curl 命令和脚本访问 Web 应用程序,而无需共享 Google Apps 脚本项目。通过更改规范,当项目与用户共享时,用户可以使用访问令牌访问 Web 应用程序。

在这种情况下,需要在请求中包含访问令牌 headers。因为在现阶段,不能使用access_token=###作为查询参数。 Ref

注:

  • 从这个情况来看,我认为在分享Google Apps Script项目时,并不是你所期望的方向,在现阶段,Who has access to the app: Anyone的Web Apps无法通过该方法使用除了浏览器。

参考文献: