Google calendar api 如何从Lambda AWS使用oAuth Google API?
我正在为谷歌日历建立Alexa技能。客户端代码在本地机器上按预期工作,因为我可以使用链接对本地机器进行身份验证。但是,当我在AWS Lambda上部署代码时,我无法进行身份验证,因为我无法通过AWS控制台输入代码 我在设置谷歌日历API的身份验证时遇到了麻烦 在AWS lambda上部署时 这个文档对我没有多大帮助Google calendar api 如何从Lambda AWS使用oAuth Google API?,google-calendar-api,google-api-client,alexa,Google Calendar Api,Google Api Client,Alexa,我正在为谷歌日历建立Alexa技能。客户端代码在本地机器上按预期工作,因为我可以使用链接对本地机器进行身份验证。但是,当我在AWS Lambda上部署代码时,我无法进行身份验证,因为我无法通过AWS控制台输入代码 我在设置谷歌日历API的身份验证时遇到了麻烦 在AWS lambda上部署时 这个文档对我没有多大帮助 您必须执行中指定的两个步骤,如果正确遵循,您将完成此操作 首先,(只是第一次)您需要设置项目并下载GOOGLE应用程序凭据,您将得到一个json文件,其中包含auth信息,假设您将其
您必须执行中指定的两个步骤,如果正确遵循,您将完成此操作 首先,(只是第一次)您需要设置项目并下载
GOOGLE应用程序凭据
,您将得到一个json文件,其中包含auth信息,假设您将其命名为project.json
现在您需要执行一些命令来获取访问令牌,下载并安装以访问这些命令
gcloud auth activate-service-account --key-file=/home/panchicore/project.json
然后
此时您将获得密钥,现在我们可以在下一步中使用它:
第二,提出一个转换API请求:(我是如何做的,并使用python请求进行了测试)
希望能有帮助 更简单的方法是使用api密钥进行身份验证。 您可以像这样向一些google API发出请求(javascript)
您应该创建一个服务帐户。这些是专门为服务器到服务器通信而设计的。文档可在此处找到: 其他答案中的解决方案存在以下问题:
- API密钥不安全
- 访问令牌(例如,通过CLI命令
gcloud auth print访问令牌获得的)过期。由于lambda是无状态的,因此无法临时存储令牌并在其过期时刷新它
const {google} = require('googleapis');
const key ={
client_email: process.env.CLIENT_EMAIL,
private_key: process.env.PRIVATE_KEY,
}
const auth = new google.auth.JWT(
key.client_email,
null,
key.private_key,
["https://www.googleapis.com/auth/analytics.readonly"],
null
);
google.options({auth});
我有多个lambda,这取决于相同的谷歌凭证和令牌 我将凭证存储在S3或DynamoDB中
我的解决方案是创建一个定时lambda函数,该函数每55分钟刷新一次oAuth令牌。如果同时运行多个lambda,这可以防止不必要的刷新。该令牌是永久有效的,还是仅在有限的时间内有效?现在不会,它们将过期,并且日期与
gcloud
reponse.Bart一起出现。我在前面的评论中否认了这一点。@panchicore,尝试了您的解决方案。如前所述,他工作了一段时间,然后钥匙过期了。您有没有一个解决方案可以在不导入google cloud sdk的情况下为Lambda函数生成身份验证令牌?2种方法:正确的方法:从google授权服务器获取访问令牌。还有一个精心编制的脚本:bash脚本,它运行例程,使用gcloud auth print access token
获取密钥,并使用过期标志将其发布到安全的dynamodb表,运行脚本的cronjob每次都会查询该标志(基本上充当缓存).API密钥不安全,许多Google API不再支持它们。
import requests
key = "KEY GOT WITH gcloud auth print-access-token"
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer {}'.format(key)
}
url = 'https://translation.googleapis.com/language/translate/v2'
data = {
'q': 'The quick brown fox jumped over the lazy dog.',
'source': 'en',
'target': 'es',
'format': 'text'
}
res = requests.post(url, json=data, headers=headers)
print res.content
>>> El rápido zorro marrón saltó sobre el perro perezoso.
const request = require('request')
request.post(`https://language.googleapis.com/v1beta2/documents:analyzeSentiment?key=${process.env.GOOGLE_API_KEY || ''}`,
{
json : true,
body : {
document : document
}
},
(error, response, body) => {
console.log(body)
})
const {google} = require('googleapis');
const key ={
client_email: process.env.CLIENT_EMAIL,
private_key: process.env.PRIVATE_KEY,
}
const auth = new google.auth.JWT(
key.client_email,
null,
key.private_key,
["https://www.googleapis.com/auth/analytics.readonly"],
null
);
google.options({auth});