このセクションでは、HTTP エンドポイント上に構築された Google Chat アプリの場合に、エンドポイントへのリクエストが Chat から送信されたことを確認する方法について説明します。
インタラクション イベントを Chat アプリのエンドポイントにディスパッチするために、Google はサービスにリクエストを送信します。リクエストが
Google から送信されたことを確認するために、Chat はエンドポイントへのすべての HTTPS リクエストの Authorization ヘッダーに
ベアラートークン
を含めます。次に例を示します。
POST
Host: yourappurl.com
Authorization: Bearer AbCdEf123456
Content-Type: application/json
User-Agent: Google-Dynamite
上記の例の文字列 AbCdEf123456 は、ベアラ認証トークンです。これは、Google
によって生成された暗号トークンです。ベアラートークンのタイプと audience フィールドの値は、認証オーディエンスのタイプによって異なります。
Cloud Run functions を使用して Chat アプリを実装している場合、Cloud IAM はトークンの検証を自動的に処理します。Google Chat サービス アカウントを認可された呼び出し元として追加する必要があります。 アプリが独自の HTTP サーバーを実装している場合は、オープンソースの Google API クライアント ライブラリを使用してベアラートークン を検証できます。
- Java: https://github.com/google/google-api-java-client
- Python: https://github.com/google/google-api-python-client
- Node.js: https://github.com/google/google-api-nodejs-client
- .NET: https://github.com/google/google-api-dotnet-client
トークンが Chat アプリで検証されない場合、サービスは HTTPS レスポンス コード 401 (Unauthorized)
でリクエストに応答する必要があります。
Cloud Run functions を使用してリクエストを認証する
次に、次の手順で Google Chat サービス アカウント chat@system.gserviceaccount.com
を呼び出し元として認可する必要があります。
Console
関数またはサービスを Google Cloud にデプロイしたら、次の操作を行います。
Google Cloud コンソールで [Cloud Run] ページに移動します。
Cloud Run サービスリストで、受信側関数の横にあるチェックボックスをオンにします (関数自体はクリックしないでください)。
画面の上部の [権限] をクリックします。[権限] パネルが開きます。
[プリンシパルを追加] をクリックします。
[新しいプリンシパル] フィールドに「
chat@system.gserviceaccount.com」と入力します。[ロールを選択] メニューから、ロール [Cloud Run] を選択します
[Cloud Run 起動元]。
[保存] をクリックします。
gcloud
gcloud functions add-invoker-policy-binding コマンドを使用します。
gcloud functions add-invoker-policy-binding RECEIVING_FUNCTION \
--member='serviceAccount:chat@system.gserviceaccount.com'RECEIVING_FUNCTION は、Chat アプリの関数の名前に置き換えます。
ID トークンで HTTP リクエストを認証する
Chat アプリの接続設定の [認証オーディエンス] フィールドが [HTTP エンドポイント URL] に設定されている場合、リクエストのベアラ認証トークンは Google 署名付き OpenID Connect(OIDC)[ID トークン] です。email フィールドは chat@system.gserviceaccount.com
に設定されます。[認証オーディエンス] フィールドは、Google Chat がリクエストを Chat
アプリに送信するように構成した URL に設定されます。たとえば、Chat アプリの構成済みエンドポイントが https://example.com/app/
の場合、ID トークンの [認証オーディエンス] フィールドは https://example.com/app/ になります。
HTTP エンドポイントが IAM ベースの認証(Cloud Run など)をサポートするサービスでホストされていない場合は、この認証方法をおすすめします。この方法を使用する場合、HTTP サービスは実行中のエンドポイントの URL に関する情報を必要としますが、Cloud プロジェクト番号に関する情報は必要ありません。
次のサンプルは、Google OAuth クライアント ライブラリを使用して、ベアラートークンが Google Chat によって発行され、アプリをターゲットにしていることを確認する方法を示しています。
Java
Python
Node.js
プロジェクト番号 JWT でリクエストを認証する
Chat アプリの
接続設定の [認証オーディエンス] フィールドが Project
Number に設定されている場合、リクエストのベアラ認証トークンは、chat@system.gserviceaccount.com によって発行および署名された自己署名
JSON ウェブトークン(JWT)です。
audience フィールドは、Chat
アプリのビルドに使用した Google Cloud プロジェクト番号に設定されます。たとえば、Chat アプリの Cloud プロジェクト番号が
1234567890 の場合、JWT の audience フィールドは 1234567890 になります。
この認証方法は、HTTP エンドポイント URL の代わりに Cloud
プロジェクト番号を使用してリクエストを検証する場合にのみおすすめします。たとえば、同じ Cloud
プロジェクト番号を維持しながらエンドポイント URL を変更する場合や、複数の Cloud プロジェクト番号に同じエンドポイントを使用し、audience
フィールドを Cloud プロジェクト番号のリストと比較する場合などです。
次のサンプルは、Google OAuth クライアント ライブラリを使用して、ベアラートークンが Google Chat によって発行され、プロジェクトをターゲットにしていることを確認する方法を示しています。
Java
Python
Node.js
関連トピック
- Google Workspace での認証と認可の概要については、 認証と認可についてをご覧ください。
- Chat での認証と認可の概要については、 認証の概要をご覧ください。
- ユーザー認証情報またはサービス アカウントを使用して認証と認可を設定する。