web-dev-qa-db-ja.com

oAuth Lambda AWSのGoogle APIを使用する方法は?

Googleカレンダー用のAlexaスキルを構築しています。リンクを使用してローカルマシンを認証できるため、クライアントサイドのコードはローカルマシンで期待どおりに機能します。しかし、AWS Lambdaにコードをデプロイすると、AWSコンソールからコードを入力できないため、認証する方法がありません。

AWS Lambdaにデプロイすると、Google Calendar APIの認証の設定で問題が発生します。

このドキュメントは私にはあまり役に立ちません Google Implementing Server Side Authentication

10
Incpetor

サービスアカウントを作成する必要があります。これらは特にサーバー間の通信用に設計されています。ドキュメントはここにあります: https://developers.google.com/identity/protocols/OAuth2ServiceAccount

他の回答からのソリューションの問題は次のとおりです。

  • APIキーは安全ではありません
  • アクセストークン(CLIコマンドgcloud auth print-access-tokenなどで取得)の有効期限が切れています。 Lambdaはステートレスであるため、トークンを一時的に保存し、期限切れになったときに更新する方法はありません。
6
Bart Kummel

here で指定された2つのステップを実行する必要があります。正しく従えば、これを実行できます。

まず、(初回のみ)プロジェクトを設定してGOOGLE APPLICATION CREDENTIALSをダウンロードする必要があります。その結果、内部に認証情報を含む1つのjsonファイルが生成されます。project.jsonと呼ぶとしましょう

次に、いくつかのコマンドを実行してアクセストークンを取得し、それらのコマンドにアクセスするには Cloud SDK をダウンロードしてインストールする必要があります。

 gcloud auth activate-service-account --key-file=/home/panchicore/project.json

その後

gcloud auth print-access-token

この時点でキーを取得します。次のステップで使用できます。

次に、翻訳APIリクエストを作成します:(私がどのようにしてpythonリクエストでテストしたか)

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.

それが役に立てば幸い。

0
panchicore