このセクションでは、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 フィールドの値は、Chat 用アプリの構成時に選択した認証オーディエンスのタイプによって異なります。
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 を使用してリクエストを認証する
関数ロジックが 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 用アプリの接続設定の [認証対象] フィールドが [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 に関する情報を必要としますが、クラウド プロジェクト番号に関する情報は必要としません。
次のサンプルは、Google OAuth クライアント ライブラリを使用して、署名なしトークンが Google Chat によって発行され、アプリを対象としていることを確認する方法を示しています。
Java
Python
Node.js
プロジェクト番号 JWT でリクエストを認証する
Chat 用アプリの接続設定の [Authentication Audience] フィールドが Project
Number に設定されている場合、リクエストのベアラー認証トークンは chat@system.gserviceaccount.com によって発行および署名された自己署名 JSON ウェブトークン(JWT)です。audience フィールドは、Chat 用アプリのビルドに使用した Google Cloud プロジェクト番号に設定されます。たとえば、Chat 用アプリの Cloud プロジェクト番号が 1234567890 の場合、JWT の audience フィールドは 1234567890 になります。
この認証方法は、HTTP エンドポイント URL ではなく、クラウド プロジェクト番号を使用してリクエストを検証する場合にのみおすすめします。たとえば、同じクラウド プロジェクト番号を維持しながらエンドポイント URL を経時的に変更する場合や、複数のクラウド プロジェクト番号に同じエンドポイントを使用して audience フィールドをクラウド プロジェクト番号のリストと比較する場合などです。
次のサンプルは、Google OAuth クライアント ライブラリを使用して、署名なしトークンが Google Chat によって発行され、プロジェクトを対象としていることを確認する方法を示しています。
Java
Python
Node.js
関連トピック
- Google Workspace の認証と認可の概要については、認証と認可についてをご覧ください。
- Chat での認証と認可の概要については、認証の概要をご覧ください。
- ユーザー認証情報またはサービス アカウントを使用して、認証と認可を設定します。