Google API 身份验证任务 API
Google API Authentication Tasks API
我想创建一个 Lambda 函数,它使用 Google 任务 API 在每天晚上的特定时间添加任务。
我不确定如何使用我的帐户进行身份验证以及如何将访问令牌/凭据安全地存储在我的 lambda 环境变量中。
据我了解,因为我的 lambda 代表用户(在这种情况下永远是我)发出请求,文档中的所有内容似乎都指向需要使用 OAuth2.0 进行身份验证,这使得有道理,因为您希望用户允许在他们的帐户中进行更改。但是,由于我只想在我的帐户上这样做,我想知道是否有一种方法可以在不执行 OAuth 流程的情况下简单地授权我的帐户,我认为 lambda 不可能这样做,因为我不会响应它每次运行。
我将如何验证我的应用程序以便调用任务 API 并根据我的帐户进行验证?
这比我想象的要多得多,不幸的是 google 没有生成可以解决很多问题的开发人员令牌。
授权与同意
如果不通过同意流程,则无法立即为您创建的应用程序授权您的帐户。一些云服务提供商会生成一个开发人员令牌,用于使用您的凭据测试您的应用程序 - 但 google 似乎没有此功能。反正不是任务 API。 AdWords API 谈论开发人员令牌,但我不确定它是否是同一个概念。
同意后无需重新授权。此一般原则适用于其他 OAuth 使用方,除非同意级别发生变化(例如:除了先前同意的读取之外,应用程序开始请求写入权限)您不会收到重新提示。如果权限级别发生变化,您将收到重新提示。
现在 - 第二部分 - 你是怎么做的?
Google explains it in detail here - 但我会进一步简化,因为您不需要为您的案例设置网络服务器,您只是为自己做这件事。
我们的目标是只为您提供初始刷新令牌。检索到刷新令牌后,无论何时访问任务 API,您都可以从 Lambda 中使用它来检索新的访问 + 刷新令牌。您只需要将刷新令牌存储在某个地方,这样您就可以持续不断地访问任务 API。您只是想获得访问权限 + 刷新令牌。
转到 https://console.developers.google.com 并创建一个新应用程序。
创建完成后,点击“启用APIs和服务”并寻找任务API .
继续创建凭证并确保你select你将从网络服务器调用这个API。选择浏览器 (JavaScript) 只会给你一个访问令牌而不是刷新令牌,因为他们会相信你将刷新令牌存储在你的服务器上,而不是浏览器上。访问令牌的时间限制为(通常)60 分钟。
您还应该select用户数据/信息,而不是您要访问的数据类型的应用程序数据/信息。应用一一般用于GSuite。
将您的重定向 uri 设置为 http://localhost:8080 - 这是您通常需要网络服务器的地方,但我们只会重定向回来到您的机器并从此处获取参数。它显然找不到网络服务器,但我们想要的参数在 url 中,我们只需复制它即可。
认证部分来了。 Google 的授权 url 是:https://accounts.google.com/o/oauth2/v2/auth
我们将为此添加参数url
- access_type=离线 // 所以你的守护程序可以离线访问它
- response_type=code // 如果你 access_type=offline
- scope=https://www.googleapis.com/auth/tasks // 你想访问什么
- redirect_uri=http://localhost:8080 // google 将代码发送到哪里
- client_id=
转到此 URL,您应该会收到同意提示。
同意它并且 google 应该将您重定向到 http://localhost:8080/?code= 我们将需要该代码。需要将其发送到 google 以获得访问 + 刷新令牌。
代码交换:向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 应用程序中 - 如果它在每次启动时的计划作业中 运行:
- 读取刷新令牌
- 调用Google获取新的刷新令牌+访问令牌
- 保存新的刷新令牌。
- 使用访问令牌访问您的任务API。
我想创建一个 Lambda 函数,它使用 Google 任务 API 在每天晚上的特定时间添加任务。
我不确定如何使用我的帐户进行身份验证以及如何将访问令牌/凭据安全地存储在我的 lambda 环境变量中。
据我了解,因为我的 lambda 代表用户(在这种情况下永远是我)发出请求,文档中的所有内容似乎都指向需要使用 OAuth2.0 进行身份验证,这使得有道理,因为您希望用户允许在他们的帐户中进行更改。但是,由于我只想在我的帐户上这样做,我想知道是否有一种方法可以在不执行 OAuth 流程的情况下简单地授权我的帐户,我认为 lambda 不可能这样做,因为我不会响应它每次运行。
我将如何验证我的应用程序以便调用任务 API 并根据我的帐户进行验证?
这比我想象的要多得多,不幸的是 google 没有生成可以解决很多问题的开发人员令牌。
授权与同意
如果不通过同意流程,则无法立即为您创建的应用程序授权您的帐户。一些云服务提供商会生成一个开发人员令牌,用于使用您的凭据测试您的应用程序 - 但 google 似乎没有此功能。反正不是任务 API。 AdWords API 谈论开发人员令牌,但我不确定它是否是同一个概念。
同意后无需重新授权。此一般原则适用于其他 OAuth 使用方,除非同意级别发生变化(例如:除了先前同意的读取之外,应用程序开始请求写入权限)您不会收到重新提示。如果权限级别发生变化,您将收到重新提示。
现在 - 第二部分 - 你是怎么做的?
Google explains it in detail here - 但我会进一步简化,因为您不需要为您的案例设置网络服务器,您只是为自己做这件事。
我们的目标是只为您提供初始刷新令牌。检索到刷新令牌后,无论何时访问任务 API,您都可以从 Lambda 中使用它来检索新的访问 + 刷新令牌。您只需要将刷新令牌存储在某个地方,这样您就可以持续不断地访问任务 API。您只是想获得访问权限 + 刷新令牌。
转到 https://console.developers.google.com 并创建一个新应用程序。
创建完成后,点击“启用APIs和服务”并寻找任务API .
继续创建凭证并确保你select你将从网络服务器调用这个API。选择浏览器 (JavaScript) 只会给你一个访问令牌而不是刷新令牌,因为他们会相信你将刷新令牌存储在你的服务器上,而不是浏览器上。访问令牌的时间限制为(通常)60 分钟。
您还应该select用户数据/信息,而不是您要访问的数据类型的应用程序数据/信息。应用一一般用于GSuite。
将您的重定向 uri 设置为 http://localhost:8080 - 这是您通常需要网络服务器的地方,但我们只会重定向回来到您的机器并从此处获取参数。它显然找不到网络服务器,但我们想要的参数在 url 中,我们只需复制它即可。
认证部分来了。 Google 的授权 url 是:https://accounts.google.com/o/oauth2/v2/auth
我们将为此添加参数url
- access_type=离线 // 所以你的守护程序可以离线访问它
- response_type=code // 如果你 access_type=offline
- scope=https://www.googleapis.com/auth/tasks // 你想访问什么
- redirect_uri=http://localhost:8080 // google 将代码发送到哪里
- client_id=
转到此 URL,您应该会收到同意提示。 同意它并且 google 应该将您重定向到 http://localhost:8080/?code= 我们将需要该代码。需要将其发送到 google 以获得访问 + 刷新令牌。
代码交换:向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 应用程序中 - 如果它在每次启动时的计划作业中 运行:
- 读取刷新令牌
- 调用Google获取新的刷新令牌+访问令牌
- 保存新的刷新令牌。
- 使用访问令牌访问您的任务API。