Google API 身份验证任务 API

Google API Authentication Tasks API

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

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

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

我将如何验证我的应用程序以便调用任务 API 并根据我的帐户进行验证?

这比我想象的要多得多,不幸的是 google 没有生成可以解决很多问题的开发人员令牌。

授权与同意

  1. 如果不通过同意流程,则无法立即为您创建的应用程序授权您的帐户。一些云服务提供商会生成一个开发人员令牌,用于使用您的凭据测试您的应用程序 - 但 google 似乎没有此功能。反正不是任务 API。 AdWords API 谈论开发人员令牌,但我不确定它是否是同一个概念。

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

现在 - 第二部分 - 你是怎么做的?

Google explains it in detail here - 但我会进一步简化,因为您不需要为您的案例设置网络服务器,您只是为自己做这件事。

我们的目标是只为您提供初始刷新令牌。检索到刷新令牌后,无论何时访问任务 API,您都可以从 Lambda 中使用它来检索新的访问 + 刷新令牌。您只需要将刷新令牌存储在某个地方,这样您就可以持续不断地访问任务 API。您只是想获得访问权限 + 刷新令牌。

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

  2. 创建完成后,点击“启用APIs和服务”并寻找任务API .

  3. 继续创建凭证并确保你select你将从网络服务器调用这个API。选择浏览器 (JavaScript) 只会给你一个访问令牌而不是刷新令牌,因为他们会相信你将刷新令牌存储在你的服务器上,而不是浏览器上。访问令牌的时间限制为(通常)60 分钟。

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

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

  6. 认证部分来了。 Google 的授权 url 是:https://accounts.google.com/o/oauth2/v2/auth

    我们将为此添加参数url

    所以整个事情应该看起来像 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,您应该会收到同意提示。 同意它并且 google 应该将您重定向到 http://localhost:8080/?code= 我们将需要该代码。需要将其发送到 google 以获得访问 + 刷新令牌。

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

POST 至:

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

Google 应该 return 你访问令牌和刷新令牌。从这一点开始,您需要将刷新令牌保存到您的 Lambda 应用程序中 - 如果它在每次启动时的计划作业中 运行:

  1. 读取刷新令牌
  2. 调用Google获取新的刷新令牌+访问令牌
  3. 保存新的刷新令牌。
  4. 使用访问令牌访问您的任务API。