1

我想创建一个 Lambda 函数,该函数使用 Google Tasks API 在每天晚上的某个时间添加任务。

我不确定如何使用我的帐户进行身份验证,以及能否将访问令牌/凭据安全地存储在我的 lambda 环境变量中。

据我了解,因为我的 lambda 代表用户(在这种情况下将始终是我)发出请求,所以文档中的所有内容似乎都指向需要使用 OAuth2.0 进行身份验证,因为你会希望获得用户对其帐户进行更改的权限。但是,由于我只想在我的帐户上这样做,我想知道是否有一种方法可以简单地授权我的帐户而无需执行 OAuth 流程,我认为 lambda 是不可能的,因为我不会响应它每次运行。

我将如何对我的应用程序进行身份验证,以便我可以调用任务 API 并针对我的帐户进行身份验证?

4

1 回答 1

1

这比我想象的要多得多,不幸的是,谷歌并没有生成可以解决很多这个问题的开发者令牌。

授权与同意

  1. 如果不经过同意流程,没有直接的方法可以为您创建的应用程序授权您的帐户。一些云服务提供商会生成一个开发人员令牌,用于使用您的凭据测试您的应用程序 - 但谷歌似乎没有此功能。无论如何都不适用于 Tasks API。AdWords API谈到了开发人员令牌,但我不确定它是否是同一个概念。

  2. 同意后,您无需重新授权。此一般原则适用于其他 OAuth 使用方,除非同意级别发生变化(例如:除了先前同意的读取之外,应用程序开始要求写入权限)您不会得到重新提示。如果权限级别发生变化,您将得到重新提示。

现在 - 第二部分 - 你如何制作一个?

谷歌在这里详细解释了它——但我会进一步简化,因为你不需要为你的案例设置一个网络服务器,你只是为自己做这件事。

我们的目标是只为您提供初始刷新令牌。检索到刷新令牌后,您可以在访问任务 API 时使用 Lambda 中的该令牌检索新的访问 + 刷新令牌。您只需要将刷新令牌存储在某个地方,这样您就可以继续访问任务 API。您只是想获得访问 + 刷新令牌。

  1. 前往https://console.developers.google.com并创建一个新应用程序。

  2. 创建后,单击“启用 API 和服务”并查找Tasks API

  3. 继续创建凭据并确保您选择将从 Web 服务器调用此 API。选择浏览器 (JavaScript) 只会为您提供访问令牌而不是刷新令牌,因为他们会信任您将刷新令牌存储在您的服务器上,而不是浏览器上。访问令牌的时间限制为(通常)60 分钟。

  4. 您还应该为要访问的数据类型选择用户数据/信息,而不是应用程序数据/信息。该应用程序一通常用于 GSuite。

  5. 将您的重定向 uri 设置为http://localhost:8080 -这是您通常需要网络服务器的地方,但我们只会重定向回您的机器并从此处获取参数。它显然找不到网络服务器,但我们想要的参数在 url 中,我们只需复制它。

  6. 现在到了认证部分。谷歌的授权网址是:https ://accounts.google.com/o/oauth2/v2/auth

    我们将向这个 url 添加参数

    • access_type=offline // 这样你的守护程序应用就可以离线访问它
    • response_type=code // 如果您有 access_type=offline 则需要
    • scope= https://www.googleapis.com/auth/tasks // 你想访问什么
    • redirect_uri= http://localhost:8080 // 谷歌会将代码发送到哪里
    • client_id=

    所以整个事情应该看起来像https://accounts.google.com/o/oauth2/v2/auth?access_type=offline&response_type=code&scope=https://www.googleapis.com/auth/tasks&redirect_uri=http://localhost :8080&client_id=

    转到此 URL,您应该会得到同意的提示。同意它,谷歌应该将你重定向到http://localhost:8080/?code=我们需要那个代码。这需要发送给谷歌以获得访问+刷新令牌。

  7. 代码交换:向 Google 发出发布请求。您可以使用邮递员。同样,通常所有这些都将由网络服务器自动处理(检测代码参数、发出发布请求等)——但我们只需要此处的刷新令牌,因此我们可以将其粘贴到我们的 Lambda 应用程序中。

邮寄至:

https://www.googleapis.com/oauth2/v4/token

带参数:

code=<the code you've retrieved>
client_id=<your_client_id>&
client_secret=<your_client_secret>&
redirect_uri=http://localhost:8080&
grant_type=authorization_code

谷歌应该返回你访问令牌和刷新令牌。从此时起,您需要将刷新令牌保存到您的 Lambda 应用程序中 - 如果它在每次启动时都在计划的作业上运行:

  1. 读取刷新令牌
  2. 致电 Google 获取新的刷新令牌 + 访问令牌
  3. 保存新的刷新令牌。
  4. 使用访问令牌访问您的 Tasks API。
于 2018-12-14T22:31:02.377 回答