如何通过Lambda AWS认证Google API?

Inc*_*tor 7 google-calendar-api alexa google-api-client

我正在为Google日历构建Alexa Skill。客户端代码可以在本地计算机上按预期工作,因为我可以使用链接对本地计算机进行身份验证。但是,当我在AWS Lambda上部署代码时,由于无法通过AWS控制台输入代码,因此无法进行身份验证。

当部署在AWS lambda上时,我无法设置Google Calendar API的身份验证。

本文档对我没有太大帮助 Google实施服务器端身份验证

Bar*_*mel 8

您应该创建一个服务帐户。这些是专为服务器到服务器通信而设计的。文档可以在这里找到:https : //developers.google.com/identity/protocols/OAuth2ServiceAccount

其他答案的解决方案存在的问题是:

  • API 密钥不安全
  • 访问令牌(例如通过 CLI 命令获得gcloud auth print-access-token)过期。由于 Lambda 是无状态的,因此无法临时存储令牌并在它到期时刷新它。


pan*_*ore 0

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

\n\n

首先,(仅第一次)您需要设置项目并下载GOOGLE APPLICATION CREDENTIALS一个包含身份验证信息的 json 文件,假设您将其命名为 project.json

\n\n

现在,您需要执行一些命令来获取访问令牌,下载并安装Cloud SDK才能访问这些命令。

\n\n
 gcloud auth activate-service-account --key-file=/home/panchicore/project.json\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后

\n\n
gcloud auth print-access-token\n
Run Code Online (Sandbox Code Playgroud)\n\n

此时您将获得密钥,现在我们可以在下一步中使用它:

\n\n

其次,发出翻译 API 请求:(我是如何做到的并使用 python 请求进行测试)

\n\n
import requests\n\nkey = "KEY GOT WITH gcloud auth print-access-token"\n\nheaders = {\n    \'Content-Type\': \'application/json\',\n    \'Authorization\': \'Bearer {}\'.format(key)\n}\n\nurl = \'https://translation.googleapis.com/language/translate/v2\'\n\ndata = {\n  \'q\': \'The quick brown fox jumped over the lazy dog.\',\n  \'source\': \'en\',\n  \'target\': \'es\',\n  \'format\': \'text\'\n}\n\nres = requests.post(url, json=data, headers=headers)\n\nprint res.content\n>>> El r\xc3\xa1pido zorro marr\xc3\xb3n salt\xc3\xb3 sobre el perro perezoso.\n
Run Code Online (Sandbox Code Playgroud)\n\n

希望能帮助到你。

\n

  • 该代币会永远有效,还是只能在有限的时间内有效? (3认同)
  • 两种方法:正确的一种:从 Google 授权服务器获取访问令牌。https://developers.google.com/identity/protocols/OAuth2。精心设计的一个:bash脚本运行例程,使用“gcloud auth print-access-token”获取密钥并将其发布到带有过期标志的安全dynamodb表中,每次运行脚本的cronjob都会查询该标志(基本上是充当缓存)。 (2认同)