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 Functions または Cloud Run を使用して 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 Functions または Cloud Run を使用してリクエストを認証する
Cloud Functions または Cloud Run を使用して関数ロジックを実装する場合は、Chat 用アプリの接続設定の [認証対象] フィールドで [HTTP エンドポイント URL] を選択し、構成内の HTTP エンドポイント URL が Cloud Functions または Cloud Run エンドポイントの URL に対応していることを確認する必要があります。
次に、Google Chat サービス アカウント chat@system.gserviceaccount.com
を呼び出し元として承認する必要があります。
次の手順では、Cloud Functions(第 1 世代)の使用方法について説明します。
Console
関数を Google Cloud にデプロイした後:
Google Cloud コンソールで、[Cloud Functions] ページに移動します。
Cloud Functions リストで、受信側関数の横にあるチェックボックスをオンにします。(関数自体はクリックしないでください)。
画面の上部の [権限] をクリックします。[権限] パネルが開きます。
[プリンシパルを追加] をクリックします。
[新しいプリンシパル] フィールドに「
chat@system.gserviceaccount.com
」と入力します。[ロールを選択] プルダウン メニューから Cloud Functions > Cloud Functions 起動元ロールを選択します。
[保存] をクリックします。
gcloud
gcloud functions add-iam-policy-binding
コマンドを使用します。
gcloud functions add-iam-policy-binding RECEIVING_FUNCTION \
--member='serviceAccount:chat@system.gserviceaccount.com' \
--role='roles/cloudfunctions.invoker'
RECEIVING_FUNCTION
は、Chat 用アプリの関数の名前に置き換えます。
次の手順は、Cloud Functions(第 2 世代)または Cloud Run サービスを使用する方法を示しています。
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 Functions や Cloud Run など)でホストされていない場合は、この認証方法をおすすめします。この方法を使用する場合、HTTP サービスは実行中のエンドポイントの URL に関する情報を必要としますが、Cloud プロジェクト番号に関する情報は必要としません。
次のサンプルは、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 ではなく Cloud プロジェクト番号を使用してリクエストを検証する場合にのみ推奨されます。たとえば、同じ Cloud プロジェクト番号を維持しながらエンドポイント URL を経時的に変更する場合や、複数の Cloud プロジェクト番号に同じエンドポイントを使用し、audience
フィールドを Cloud プロジェクト番号のリストと比較する場合などです。
次のサンプルは、Google OAuth クライアント ライブラリを使用して、ベアラー トークンが Google Chat によって発行され、プロジェクトを対象としていることを確認する方法を示しています。
Java
Python
Node.js
関連トピック
- Google Workspace の認証と認可の概要については、認証と認可についてをご覧ください。
- Chat での認証と認可の概要については、認証の概要をご覧ください。
- ユーザー認証情報またはサービス アカウントを使用して、認証と認可を設定します。