Chat アプリと Google Chat API リクエストの認証と認可

認証と認可は、Google Cloud のプロジェクトとリソースの リソースへのアクセスをそれぞれ制御できます。このドキュメントでは、Chat アプリと Chat API リクエストの認証と認可の仕組みについて概説します。

プロセスの概要

次の図は、Google Chat の認証と認可の大まかな手順を示しています。

Google Chat の認証と認可の手順の概要
図 1. Google Chat の認証と認可の手順の概要を説明します。

  1. Google Cloud プロジェクトを構成し、Chat API を有効にして Chat アプリを構成する: 開発中に Google Cloud プロジェクトを作成します。Google Cloud プロジェクトで Chat API を有効にし、 Chat 用アプリを構成して認証を設定します。 詳しくは、Google Workspace で開発するChat アプリを作成するをご覧ください。

  2. Chat API を呼び出す: アプリが Chat API を呼び出すと、認証情報は Chat API に送信されます。条件 アプリがサービス アカウントで認証されると、認証情報はサービス アカウントとして 必要があります。アプリで、まだ付与されていないユーザーの認証を使用して Chat API を呼び出す必要がある場合は、ユーザーにログインを求めるメッセージが表示されます。

  3. リソースのリクエスト: アプリが次の権限によるアクセスを要求しています。 スコープ 認証の設定時に指定します。

  4. 同意を求める: アプリがユーザーとして認証されている場合、OAuth 同意画面が表示されます。これにより、ユーザーはリクエストされたデータへのアクセスをアプリに許可するかどうかを決定できます。サービス アカウントを使用した認証では ユーザーの同意が必要です。

  5. リソースの承認済みリクエストを送信する: ユーザーが認可スコープに同意すると、アプリは認証情報とユーザーが承認したスコープをリクエストにバンドルします。リクエストが Google 認可サーバーに送信され、アクセス トークンが取得されます。

  6. Google がアクセス トークンを返す: アクセス トークンには、 付与されています。返されたスコープのリストが、指定したポリシーよりも制限が トークンによって制限されたすべての機能がオフになります。

  7. リクエストされたリソースにアクセスする: アプリは Google のアクセス トークンを使用して Chat API を呼び出し、Chat API リソースにアクセスします。

  8. 更新トークンを取得する(省略可): アプリが 1 つのアクセス トークンの有効期間を超える Google Chat API では、 あります。詳細については、次をご覧ください: OAuth 2.0 を使用して Google API にアクセスする

  9. 追加のリソースをリクエストする: アプリがさらにアクセス権を必要とする場合は、ユーザーに確認を求めます。 新しいスコープを付与し、アクセス トークンを取得するための新しいリクエストが発生する (ステップ 3 ~ 6)。

Chat アプリで認証が必要な場合

チャットアプリは、ユーザー操作に応じて、または非同期でメッセージを送信できます。また、Chat スペースの作成や Chat スペース内のユーザーのリスト取得など、ユーザーに代わってタスクを完了することもできます。

Chat アプリがレスポンスの処理中に Chat API または別の Google API を呼び出す場合を除き、ユーザー操作に応答するために認証は必要ありません。

非同期メッセージを送信したり、ユーザーに代わってタスクを実行したりするために、Chat アプリは Chat API に対して RESTful リクエストを行います。このリクエストには認証と承認が必要です。

ユーザー操作に対するレスポンスで認証が不要

Google Chat アプリは、インタラクション イベントを受信して同期的に応答するために、ユーザーまたは Chat アプリとして認証する必要はありません。

Google Chat アプリは、ユーザーが Google Chat でなんらかの操作を は、次のような Chat 用アプリを呼び出します。

  • ユーザーが Chat アプリにメッセージを送信します。
  • ユーザーが Chat 用アプリに @メンションしました。
  • ユーザーが Chat 用アプリの スラッシュ コマンドを使用します。

次の図は、HTTP リクエスト間のリクエスト / レスポンス シーケンスを Chat ユーザーと Chat アプリ:

<ph type="x-smartling-placeholder">
</ph> Chat 用アプリのインタラクション イベントに承認は不要
図 2. Chat 用アプリのインタラクション イベントには認証が不要。

  1. ユーザーが Chat アプリにメッセージを送信すると、 できます。
  2. Google Chat からアプリにメッセージが転送されます。
  3. アプリはメッセージを受信して処理し、Google Chat にレスポンスを返します。
  4. Google Chat は、ユーザーまたはスペースにレスポンスをレンダリングします。

このシーケンスが Chat 用アプリのインタラクションごとに繰り返されます。 イベントです。

非同期メッセージには認証が必要

非同期メッセージは、Chat アプリが Chat API にリクエストを送信するときに発生します。このリクエストには認証と承認が必要です。

Chat API を呼び出すことで、Chat アプリは Google Chat にメッセージを投稿したり、タスクを完了したり、ユーザーに代わってデータにアクセスしたりできます。たとえば、サーバーの停止を検出した Chat アプリは、Chat API を呼び出して次のことができます。

  • サービス停止の調査と修正専用の Chat スペースを作成します。
  • Chat スペースにユーザーを追加する。
  • Chat スペースにメッセージを投稿して、サービス停止の詳細を伝えます。

次の図は、Chat アプリと Chat スペース間の非同期メッセージ シーケンスを示しています。

非同期メッセージに認証が必要
図 3. 非同期メッセージには認証が必要です。

  1. Chat アプリは、メッセージを作成し、 Chat 用 API に spaces.messages.create メソッド、 HTTP リクエストにユーザー認証情報を含めます。
  2. Google Chat は、Google Chat で Chat 用アプリを認証 サービスアカウントまたはユーザー認証情報です。
  3. Google Chat は、指定された Chat にアプリのメッセージをレンダリングする。 選択します。

Chat API のスコープ

OAuth 同意画面を構成してスコープを選択する ユーザーやアプリのレビュアーに表示する情報を定義して、 有効にして後で公開できます

アプリに付与されるアクセスレベルを定義するには、認可スコープを特定して宣言する必要があります。認可スコープは OAuth 2.0 URI である Google Workspace アプリ名、そのアプリ名、 アクセスレベルが含まれます。

機密でないスコープ

スコープコード 説明
https://www.googleapis.com/auth/chat.bot

Chat アプリがチャットを表示し、メッセージを送信できるようにします。

このスコープは、サービス アカウントによるアプリ認証のみをサポートします。このスコープを使用して、ユーザー認証情報またはドメイン全体の委任で認証することはできません。

機密性の高いスコープ

スコープコード 説明
https://www.googleapis.com/auth/chat.spaces 会話とスペースの作成、メタデータの参照または編集( 履歴設定とアクセス設定など)を Chat 内で管理できます。
https://www.googleapis.com/auth/chat.spaces.create Chat で新しい会話を作成する。
https://www.googleapis.com/auth/chat.spaces.readonly Chat でチャットとスペースを表示します。
https://www.googleapis.com/auth/chat.memberships Chat の会話のメンバーを表示、追加、更新、削除する。
https://www.googleapis.com/auth/chat.memberships.app Google Chat の会話への追加と削除。
https://www.googleapis.com/auth/chat.memberships.readonly Chat の会話のメンバーを表示します。
https://www.googleapis.com/auth/chat.messages.create Chat でメッセージを作成して送信する。
https://www.googleapis.com/auth/chat.messages.reactions Chat 内のメッセージに対するリアクションの表示、追加、削除。
https://www.googleapis.com/auth/chat.messages.reactions.create Chat でメッセージにリアクションを追加できます。
https://www.googleapis.com/auth/chat.messages.reactions.readonly Chat でメッセージへのリアクションを表示する。
https://www.googleapis.com/auth/chat.users.readstate Chat の会話の最終既読時間の表示と変更を行います。
https://www.googleapis.com/auth/chat.users.readstate.readonly Chat のスレッドの最終既読時間を表示します。
https://www.googleapis.com/auth/chat.admin.spaces.readonly Chat で、管理者のドメインが所有するチャットとスペースを表示します。
https://www.googleapis.com/auth/chat.admin.spaces 管理者のドメインが所有するチャットとスペースを Chat で表示または編集する。
https://www.googleapis.com/auth/chat.admin.memberships.readonly 管理者のドメインが所有する会話のメンバーと管理者を Chat で表示します。
https://www.googleapis.com/auth/chat.admin.memberships 管理者のドメインが所有する会話のメンバーとマネージャーを Chat で表示、追加、更新、削除する。
https://www.googleapis.com/auth/chat.app.spaces

Chat での会話とスペースの作成、メタデータ(履歴設定やアクセス設定を含む)の参照、更新。要件 管理者の承認が必要です。

このスコープは、サービス アカウントによるアプリ認証のみをサポートします。マイページ 認証には、ユーザーの認証情報または Google API を ドメイン全体の委任 このスコープを使用します

https://www.googleapis.com/auth/chat.app.spaces.create

Chat で新しい会話やスペースを作成する。管理者の承認が必要です。

このスコープは、サービス アカウントを使用したアプリの認証のみをサポートします。マイページ 認証には、ユーザーの認証情報または Google API を ドメイン全体の委任 このスコープを使用します

https://www.googleapis.com/auth/chat.app.memberships

Chat の会話とスペースのメンバーを参照、追加、更新、削除する。 管理者の承認が必要です。

このスコープは、サービス アカウントを使用したアプリの認証のみをサポートします。このスコープを使用して、ユーザー認証情報またはドメイン全体の委任で認証することはできません。

https://www.googleapis.com/auth/chat.customemojis Chat でカスタム絵文字を表示、作成、削除する。

制限付きスコープ

スコープコード 説明
https://www.googleapis.com/auth/chat.delete 会話とスペース、関連ファイルへのアクセス権を削除する できます。
https://www.googleapis.com/auth/chat.import スペース、メッセージ、メンバーシップを Chat にインポートします。詳細については、Chat アプリにデータのインポートを許可するをご覧ください。
https://www.googleapis.com/auth/chat.messages メッセージの参照、作成、送信、更新、削除、メッセージに対するリアクションの追加、参照、削除。
https://www.googleapis.com/auth/chat.messages.readonly Chat でメッセージとリアクションを表示する。
https://www.googleapis.com/auth/chat.admin.delete 管理者のドメインが所有する会話とスペース、関連ファイルへのアクセス権を削除する できます。
https://www.googleapis.com/auth/chat.app.delete

会話とスペース、関連ファイルへのアクセス権を削除する できます。 管理者の承認が必要です。

このスコープは、サービス アカウントによるアプリ認証のみをサポートします。このスコープを使用して、ユーザー認証情報またはドメイン全体の委任で認証することはできません。

上の表のスコープは、 次の定義があります。

アプリが他の Google API へのアクセスを必要とする場合は、それらのスコープも追加できます。Google API スコープの詳細については、OAuth 2.0 を使用した Google API へのアクセスをご覧ください。

Google Workspace API のスコープについて詳しくは、以下をご覧ください。 OAuth 同意画面を構成し、スコープを選択します

必要な認証の種類

Chat アプリが Chat API で認証と承認を行う方法は 2 つあります。

ユーザー認証
ユーザー認証 を使用すると、Chat アプリがユーザーデータにアクセスして、アクションを実行できるようになります。 自動的に作成されます。OAuth スコープは、承認されたデータとアクションを指定します。Chat アプリが管理者によってインストールされているか、ドメイン全体の委任が付与されている場合を除き、Chat アプリがユーザーに代わって初めてアクションを実行する際は、ユーザーが OAuth 同意画面を使用して Chat アプリを承認する必要があります。
アプリの認証

アプリ認証を使用すると、Chat アプリはサービス アカウントの認証情報を使用して、自身としてデータにアクセスし、アクションを完了できます。これは、 Chat アプリ 独自の認証情報を使用してリソースにアクセスし、操作します。 エンドユーザーは、 Chat 用アプリの API 呼び出し、 アプリの認証をサポートする OAuth 認証スコープを OAuth 同意画面に移動します。

アプリ認証をサポートする OAuth 認証スコープは、次の 2 種類です。

  • https://www.googleapis.com/auth/chat.bot: Chat アプリは、この認可スコープをサポートする Google Chat API メソッドを呼び出して、アクセス権を持つリソース(エンドユーザーが Chat アプリを追加したスペース内のメッセージなど)を作成、更新、取得、一覧表示、削除できます。お客様の Chat アプリはこの承認スコープを自己付与できます。 管理者やエンドユーザーの承認は必要ありません。
  • https://www.googleapis.com/auth/chat.app.*デベロッパー プレビュー): これらのスコープを使用するには、管理者による 1 回限りの承認が必要です。管理者の承認を得るには、Google Workspace Marketplace 対応の OAuth クライアントを作成し、Google Workspace Marketplace SDK でアプリを構成して、Chat アプリのサービス アカウントを準備し、管理者の承認を得る必要があります。これらのスコープ Chat アプリから特定の Google Chat API を呼び出せるようにする あります。たとえば、chat.app.spaces.create はアプリによる作成を許可します。 Chat スペース。

メソッドがユーザー認証とアプリ認証の両方をサポートしている場合、Chat API は、使用する認証タイプに基づいて異なる結果を返します。

  • アプリの認証では、メソッドは、API 呼び出しによって Chat アプリがアクセスできます。
  • ユーザー認証を使用すると、メソッドはユーザーがアクセスできるリソースのみを返します。

たとえば、アプリの認証を使用して spaces.list() メソッドを呼び出すと、次の結果が返されます。 Chat アプリがメンバーになっているスペースのリスト。 ユーザーの承認で spaces.list() を呼び出すと、ユーザーがメンバーになっているスペースのリストが返されます。イン 両方のタイプの (設計に応じて、Chat API を呼び出す際の認証) 使用する必要があります。

非同期 Chat API 呼び出しの場合

次の表に、Chat API メソッドと、サポートされている認可スコープを示します。

メソッド ユーザー認証のサポート アプリの認証のサポート サポートされている認可スコープ
スペース  
スペースを作成する ユーザー認証を使用する場合: <ph type="x-smartling-placeholder">
    </ph>
  • chat.spaces.create
  • chat.spaces
  • chat.import
で確認できます。 アプリの認証管理者の承認を使用する場合(デベロッパー プレビューで利用可能):
  • chat.app.spaces.create
  • chat.app.spaces
スペースを設定する ユーザー認証を使用する場合: <ph type="x-smartling-placeholder">
    </ph>
  • chat.spaces.create
  • chat.spaces
スペースを取得する ユーザー認証の場合:
  • chat.spaces.readonly
  • chat.spaces
で確認できます。 管理者権限を使用したユーザー認証の場合:
  • chat.admin.spaces.readonly
で確認できます。 アプリの認証を使用する場合: <ph type="x-smartling-placeholder">
    </ph>
  • chat.bot
で確認できます。 アプリの認証管理者の承認を使用する場合(デベロッパー プレビューで利用可能):
  • chat.app.spaces
スペースを一覧表示する ユーザー認証を使用する場合: <ph type="x-smartling-placeholder">
    </ph>
  • chat.spaces.readonly
  • chat.spaces
で確認できます。 アプリの認証を使用する場合: <ph type="x-smartling-placeholder">
    </ph>
  • chat.bot
検索スペース 管理者権限を使用したユーザー認証の場合: <ph type="x-smartling-placeholder">
    </ph>
  • chat.admin.spaces.readonly
スペースを更新する ユーザー認証を使用する場合: <ph type="x-smartling-placeholder">
    </ph>
  • chat.spaces
  • chat.import
で確認できます。 管理者権限を使用したユーザー認証の場合:
  • chat.admin.spaces
アプリ認証管理者の承認デベロッパー プレビューで利用可能):
  • chat.app.spaces
スペースを削除する ユーザー認証を使用する場合: <ph type="x-smartling-placeholder">
    </ph>
  • chat.delete
  • chat.import
管理者権限を使用したユーザー認証の場合:
  • chat.admin.delete
アプリ認証管理者の承認デベロッパー プレビューで利用可能):
  • chat.app.delete
スペースのインポート プロセスを完了する ユーザー認証を使用する場合: <ph type="x-smartling-placeholder">
    </ph>
  • chat.import
ダイレクト メッセージを探す ユーザー認証の場合:
  • chat.spaces.readonly
  • chat.spaces
で確認できます。 アプリの認証を使用する場合: <ph type="x-smartling-placeholder">
    </ph>
  • chat.bot
メンバー  
メンバーを作成する ユーザー認証の場合:
  • chat.memberships
  • chat.memberships.app
  • chat.import
管理者権限を使用したユーザー認証の場合:
  • chat.admin.memberships
で確認できます。 アプリの認証管理者の承認を使用する場合(デベロッパー プレビューで利用可能):
  • chat.app.memberships
メンバーを取得する ユーザー認証の場合:
  • chat.memberships.readonly
  • chat.memberships
で確認できます。 アプリの認証を使用する場合: <ph type="x-smartling-placeholder">
    </ph>
  • chat.bot
で確認できます。 管理者権限を使用したユーザー認証の場合:
  • chat.admin.memberships.readonly
メンバーを一覧表示する ユーザー認証の場合:
  • chat.memberships.readonly
  • chat.memberships
  • chat.import
アプリ認証を使用する場合:
  • chat.bot
管理者権限を使用したユーザー認証の場合:
  • chat.admin.memberships.readonly
メンバーを削除する ユーザー認証を使用する場合: <ph type="x-smartling-placeholder">
    </ph>
  • chat.memberships
  • chat.memberships.app
  • chat.import
で確認できます。 管理者権限を使用したユーザー認証の場合:
  • chat.admin.memberships
アプリ認証管理者の承認デベロッパー プレビューで利用可能):
  • chat.app.memberships
メンバーを更新する ユーザー認証の場合:
  • chat.memberships
  • chat.import
管理者権限を使用したユーザー認証の場合:
  • chat.admin.memberships
で確認できます。 アプリの認証管理者の承認を使用する場合(デベロッパー プレビューで利用可能):
  • chat.app.memberships
メッセージ  
メッセージを作成する ユーザー認証の場合:
  • chat.messages.create
  • chat.messages
  • chat.import
アプリ認証を使用する場合:
  • chat.bot
メッセージを取得する ユーザー認証を使用する場合: <ph type="x-smartling-placeholder">
    </ph>
  • chat.messages.readonly
  • chat.messages
アプリ認証を使用する場合:
  • chat.bot
メッセージを一覧表示する ユーザー認証の場合:
  • chat.messages.readonly
  • chat.messages
  • chat.import
メッセージを更新する ユーザー認証を使用する場合: <ph type="x-smartling-placeholder">
    </ph>
  • chat.messages
  • chat.import
アプリ認証を使用する場合:
  • chat.bot
メッセージを削除する ユーザー認証を使用する場合: <ph type="x-smartling-placeholder">
    </ph>
  • chat.messages
  • chat.import
で確認できます。 アプリの認証を使用する場合: <ph type="x-smartling-placeholder">
    </ph>
  • chat.bot
リアクション  
リアクションを作成する ユーザー認証の場合:
  • chat.messages.reactions.create
  • chat.messages.reactions
  • chat.messages
  • chat.import
リアクションを一覧表示する ユーザー認証の場合:
  • chat.messages.reactions.readonly
  • chat.messages.reactions
  • chat.messages.readonly
  • chat.messages
リアクションを削除する ユーザー認証を使用する場合: <ph type="x-smartling-placeholder">
    </ph>
  • chat.messages.reactions
  • chat.messages
  • chat.import
カスタム絵文字  
カスタム絵文字を作成する ユーザー認証の場合:
  • chat.customemojis
カスタム絵文字を削除する ユーザー認証を使用する場合: <ph type="x-smartling-placeholder">
    </ph>
  • chat.customemojis
カスタム絵文字を入手 ユーザー認証を使用する場合: <ph type="x-smartling-placeholder">
    </ph>
  • chat.customemojis
カスタム絵文字を一覧表示する ユーザー認証を使用する場合: <ph type="x-smartling-placeholder">
    </ph>
  • chat.customemojis
メディア、添付ファイル  
メディアを添付ファイルとしてアップロードする ユーザー認証を使用する場合: <ph type="x-smartling-placeholder">
    </ph>
  • chat.messages.create
  • chat.messages
  • chat.import
メディアをダウンロードする ユーザー認証の場合:
  • chat.messages.readonly
  • chat.messages
で確認できます。 アプリの認証を使用する場合: <ph type="x-smartling-placeholder">
    </ph>
  • chat.bot
メッセージの添付ファイルを取得する アプリの認証を使用する場合: <ph type="x-smartling-placeholder">
    </ph>
  • chat.bot
ユーザーの読み取り状態
ユーザーのスペースの読み取り状態を取得する ユーザー認証の場合:
  • chat.users.readstate
  • chat.users.readstate.readonly
ユーザーのスペース読み取り状態を更新する ユーザー認証の場合:
  • chat.users.readstate
ユーザーのスレッドの読み取り状態を取得する ユーザー認証を使用する場合: <ph type="x-smartling-placeholder">
    </ph>
  • chat.users.readstate
  • chat.users.readstate.readonly
宇宙イベント
スペースのイベントを取得する ユーザー認証では、 スコープを使用する必要があり、 <ph type="x-smartling-placeholder"></ph> イベントタイプ: <ph type="x-smartling-placeholder">
    </ph>
  • メッセージに関するイベントの場合:
    • chat.messages
    • chat.messages.readonly
  • リアクションに関するアクティビティの場合:
    • chat.messages.reactions
    • chat.messages.reactions.readonly
    • chat.messages
    • chat.messages.readonly
  • メンバーシップに関するイベントの場合:
    • chat.memberships
    • chat.memberships.readonly
  • スペースに関するイベントの場合:
    • chat.spaces
    • chat.spaces.readonly
<ph type="x-smartling-placeholder"></ph> スペースのイベントを一覧表示する ユーザー認証では、 スコープを使用する必要があります。 <ph type="x-smartling-placeholder"></ph> リクエストに含まれるイベントタイプに基づいて識別されます。 <ph type="x-smartling-placeholder">
    </ph>
  • メッセージに関するイベントの場合:
    • chat.messages
    • chat.messages.readonly
  • リアクションに関するアクティビティの場合:
    • chat.messages.reactions
    • chat.messages.reactions.readonly
    • chat.messages
    • chat.messages.readonly
  • メンバーシップに関するイベントの場合:
    • chat.memberships
    • chat.memberships.readonly
  • スペースに関するイベントの場合:
    • chat.spaces
    • chat.spaces.readonly

Chat 用アプリのインタラクション イベントの場合

次の表に、ユーザーが Chat アプリを操作する一般的な方法と、認証が必須かサポートされているかを示します。

シナリオ 認証は不要 ユーザー認証をサポート アプリの認証のサポート
次のユーザーからメッセージを受信する:
Chat 用アプリのインタラクション イベント
Apps Script コールバック
Google Cloud Pub/Sub
メッセージへの応答:
同期的に、Chat アプリのインタラクション イベントを使用
同期的に、Apps Script コールバックの戻り値を使用する
新しいメッセージを送信する:
受信 Webhook を使用