HTTP エンドポイントで構築された Google Chat 用アプリの場合、このセクションでは、エンドポイントへのリクエストが Chat から送信されたことを確認する方法について説明します。
インタラクション イベントを Chat 用アプリのエンドポイントにディスパッチするため、Google はサービスに HTTPS リクエストを送信します。リクエストが Google から送信されたことを確認するため、Chat は Google 署名付きの OpenID Connect(OIDC)ID トークンを、すべての HTTPS リクエストの Authorization ヘッダー(およびリクエスト本文の authorizationEventObject.systemIdToken フィールド)の署名なしトークンとして含めます。次に例を示します。
POST
Host: yourappurl.com
Authorization: Bearer AbCdEf123456
Content-Type: application/json
User-Agent: Google-Dynamite
上記の例の文字列 AbCdEf123456 は、Bearer 認証トークンです。この暗号トークンは、Chat 用アプリの一意のプロジェクトごとのサービス アカウント(service-<var>PROJECT_NUMBER</var>@gcp-sa-gsuiteaddons.iam.gserviceaccount.com)によって署名され、Chat 用アプリを構成するときに audience フィールドが Chat 用アプリ用に構成された HTTP エンドポイント URL に設定されます。
Chat 用アプリのサービス アカウントのメールアドレスは、Google Cloud コンソールの Chat API の [構成] タブの [接続設定] セクションからコピーできます。
Google Cloud コンソールで、メニュー > [API とサービス] > [有効な API とサービス] > [Google Chat API] > [構成] に移動します。
[インタラクティブ機能] > [接続設定] で、[サービス アカウントのメールアドレス](
service-<var>PROJECT_NUMBER</var>@gcp-sa-gsuiteaddons.iam.gserviceaccount.com)をコピーします。
Cloud Run 関数または Cloud Run を使用して Chat 用アプリを実装した場合、Chat 用アプリのサービス アカウントに Cloud Run Invoker(roles/run.invoker)ロールを付与すると、Cloud IAM がトークンの検証を自動的に処理します。アプリが独自の 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 を使用してリクエストを認証する
Cloud Run functions または Cloud Run を使用して関数ロジックが実装されている場合は、Chat 用アプリの接続設定の [トリガー] で構成されている HTTP エンドポイント URL が、Cloud Run functions のエンドポイントの URL に対応していることを確認してください。
次に、次の手順で、Chat 用アプリのサービス アカウント(Chat API の [構成] タブの [接続設定] セクションからコピーした service-<var>PROJECT_NUMBER</var>@gcp-sa-gsuiteaddons.iam.gserviceaccount.com)を呼び出し元として承認します。
Console
関数またはサービスを Google Cloud にデプロイした後:
Google Cloud コンソールで [Cloud Run] ページに移動します。
Cloud Run サービスリストで、受信側関数の横にあるチェックボックスをオンにします。(関数自体はクリックしないでください)。
画面の上部の [権限] をクリックします。[権限] パネルが開きます。
[プリンシパルを追加] をクリックします。
[新しいプリンシパル] フィールドに、Chat 用アプリのサービス アカウントのメールアドレス(
service-<var>PROJECT_NUMBER</var>@gcp-sa-gsuiteaddons.iam.gserviceaccount.com)を入力します。[ロールを選択] メニューから、[Cloud Run] ロールを選択します。
Cloud Run 起動元。
[保存] をクリックします。
gcloud
gcloud functions add-invoker-policy-binding コマンドを使用します。
gcloud functions add-invoker-policy-binding RECEIVING_FUNCTION \
--member='serviceAccount:service-PROJECT_NUMBER@gcp-sa-gsuiteaddons.iam.gserviceaccount.com'次のように置き換えます。
RECEIVING_FUNCTION: Chat 用アプリの関数の名前。PROJECT_NUMBER: Chat 用アプリのサービス アカウントのメールアドレスから取得したプロジェクト番号。
ID トークンを使用して HTTP リクエストを認証する
HTTP エンドポイントの場合、リクエストのベアラー認証トークンは、Google 署名付きの OpenID Connect(OIDC)ID トークンです。email フィールドは Chat 用アプリのサービス アカウントのメールアドレス(service-<var>PROJECT_NUMBER</var>@gcp-sa-gsuiteaddons.iam.gserviceaccount.com)に設定され、audience フィールドはリクエストを受信するように構成された HTTP エンドポイント URL に設定されます。たとえば、Chat 用アプリの構成済みエンドポイントが https://example.com/app/ の場合、ID トークンの audience フィールドは https://example.com/app/ になります。
HTTP エンドポイントが IAM ベースの認証をサポートするサービス(Cloud Run など)でホストされていない場合は、この認証方法をおすすめします。
次のサンプルは、Google OAuth クライアント ライブラリを使用して、署名なしトークンが Chat 用アプリに対して Google によって発行され、アプリのエンドポイントを対象としていることを確認する方法を示しています。
Java
Python
Node.js
関連トピック
- Google Workspace の認証と認可の概要については、認証と認可についてをご覧ください。
- Chat での認証と認可の概要については、認証の概要をご覧ください。
- ユーザー認証情報またはサービス アカウントを使用して認証と認可を設定します。
アドオンではない Chat 用アプリ: Google Chat からのリクエストを検証する
次のドキュメントは、Google Workspace アドオンではない Chat 用アプリに適用されます。アドオンではない Chat 用アプリを移行するには、Google Chat 用アプリを Google Workspace アドオンに変換するをご覧ください。
[接続設定] で HTTP エンドポイント URL が構成されていないアドオン以外の Chat 用アプリの場合、署名なしトークンのタイプと audience フィールドの値は、Chat 用アプリの構成時に選択した認証オーディエンスのタイプによって異なります。リクエストは共有サービス アカウント chat@system.gserviceaccount.com によって署名されます。
Cloud Run functions を使用してリクエストを認証する(アドオンではない Chat 用アプリ)
関数ロジックが Cloud Run functions を使用して実装されている場合は、Chat 用アプリの接続設定の [認証対象] フィールドで [HTTP エンドポイント URL] を選択し、構成内の HTTP エンドポイント URL が Cloud Run functions エンドポイントの URL に対応していることを確認する必要があります。
次に、次の手順で 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 用アプリ)
アドオンではない Chat 用アプリの接続設定の [認証オーディエンス] フィールドが [HTTP エンドポイント URL] に設定されている場合、リクエストのベアラー認証トークンは Google 署名付き OpenID Connect(OIDC)ID トークンです。email フィールドが chat@system.gserviceaccount.com に設定されている。[認証オーディエンス] フィールドは、アドオンではない Chat 用アプリにリクエストを送信するように Google Chat を構成した URL に設定されます。たとえば、Chat 用アプリの構成済みエンドポイントが https://example.com/app/ の場合、ID トークンの [認証オーディエンス] フィールドは https://example.com/app/ です。
次のサンプルは、Google OAuth クライアント ライブラリを使用して、署名なしトークンが Google Chat によって発行され、アドオンではない Chat 用アプリを対象としていることを確認する方法を示しています。
Java
Python
Node.js
プロジェクト番号 JWT でリクエストを認証する(アドオンではない Chat 用アプリ)
アドオンではない Chat 用アプリの接続設定の [認証対象] フィールドが Project
Number に設定されている場合、リクエストのベアラー認証トークンは、chat@system.gserviceaccount.com によって発行および署名された自己署名 JSON ウェブトークン(JWT)です。audience フィールドには、アドオンではない Chat 用アプリのビルドに使用した Google Cloud プロジェクト番号が設定されます。たとえば、Chat 用アプリのクラウド プロジェクト番号が 1234567890 の場合、JWT の audience フィールドは 1234567890 になります。
次のサンプルは、Google OAuth クライアント ライブラリを使用して、署名なしトークンが Google Chat によって発行され、プロジェクトを対象としていることを確認する方法を示しています。