Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google calendar api 如何从Lambda AWS使用oAuth Google API?_Google Calendar Api_Google Api Client_Alexa - Fatal编程技术网

Google calendar api 如何从Lambda AWS使用oAuth Google API?

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信息,假设您将其

我正在为谷歌日历建立Alexa技能。客户端代码在本地机器上按预期工作,因为我可以使用链接对本地机器进行身份验证。但是,当我在AWS Lambda上部署代码时,我无法进行身份验证,因为我无法通过AWS控制台输入代码

我在设置谷歌日历API的身份验证时遇到了麻烦 在AWS lambda上部署时

这个文档对我没有多大帮助

您必须执行中指定的两个步骤,如果正确遵循,您将完成此操作

首先,(只是第一次)您需要设置项目并下载
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是无状态的,因此无法临时存储令牌并在其过期时刷新它

我知道这已经很晚了,但在与这个问题进行了大量的斗争之后,我找到了一个解决方案。使用JWT进行googleauth吗

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});