DoiTのミッションは、クラウドユーザーの皆様がworkloadsを効率的かつセキュアに、そしてコストを最適化した形で運用できるよう支援することです。お客様からよくいただくご相談のひとつが、Google Workspace APIの認証プロセスです。特に、ユーザー本人の操作を介さずに代理でAPIを呼び出したいケース、いわゆる2-Legged OAuthフローのシナリオで課題が生じます。
GoogleはAPIとやり取りするための3つの認証方式を提供しています。
1. APIキー:Google Air Quality APIで大気質データを取得する場合など、公開情報へのアクセスに適しています。
2. OAuth認証情報:3-Legged OAuthフローでユーザーの代理としてAPIを呼び出す際、ユーザーの同意が必要なアプリケーションで使用します。
- サービスアカウント認証:本記事で取り上げる方式です。ユーザーの操作を必要とせず、ユーザーの代理としてアクションを実行できます。2-Legged OAuthフローで動作します。
具体的なユースケースを考えてみましょう。Workspace組織内のユーザーのカレンダーイベントを取得し、各ユーザーのスケジュールを分析して最適な開催時間を判断するバックエンドアプリケーションを構築するケースです。
このタスクにAPIキーは利用できません(非公開APIには使えないため)。OAuth認証情報なら利用可能ですが、ユーザーの同意が必要となります。一方でサービスアカウント認証を使えば、ユーザーの関与なしにAPIエンドポイントへアクセスできます。本記事ではこの方式を解説します。
サービスアカウント認証を実装し、ユーザーの代理としてGoogle Calendar APIで認可を行う手順は次のとおりです。
1. Google Cloudのサービスアカウントを作成する。
2. サービスアカウントにドメイン全体の権限を委任する。これはGoogle Workspace管理者のみが実施できる作業です。
3. 委任された認証情報を用いてGoogle Calendar APIで認証を行う。これはユーザーインパーソネーション(なりすまし)とも呼ばれるプロセスです。
以下は、Pythonで委任された認証情報を使ってAPIクライアントを初期化するコードスニペットです。
from __future__ import print_function
from googleapiclient.discovery import build
from google.oauth2.credentials import Credentials
from google.oauth2 import service_account
SCOPES = ['https://www.googleapis.com/auth/calendar']
SERVICE_ACCOUNT_FILE = 'credentials.json'
credentials = service_account.Credentials.from_service_account_file(
SERVICE_ACCOUNT_FILE, scopes=SCOPES)
def main():
delegated_credentials = credentials.with_subject('[email protected]')
service = build('calendar', 'v3', credentials=delegated_credentials)
events_results = service.calendars().events.list(calendarId='primary').execute()
events = events_result.get("items", [])
if not events:
print("No upcoming events found.")
return
for event in events:
start = event["start"].get("dateTime", event["start"].get("date"))
print(start, event["summary"])
if __name__ == '__main__':
main()
重要な点として、APIを呼び出す対象のユーザーごとに、委任された認証情報でAPIクライアントを初期化する必要があります。
delegated_credentials = credentials.with_subject('[email protected]')
service = build('calendar', 'v3', credentials=delegated_credentials)
[email protected] は、API呼び出しを代行する対象のWorkspaceユーザーであり、このケースでは当該ユーザーのカレンダーへアクセスします。
このアプローチは、Calendar Python APIクライアントのクイックスタートガイドで紹介されているOAuth認証情報による方式とは異なります。クイックスタートでは、ユーザーの同意が必要な3-Legged OAuthフローが用いられています。
本記事では、特にユーザーの操作を認証フローに含めるべきでないシナリオを念頭に、Google Workspace APIのバックエンド認証について整理しました。本ガイドが疑問解消の一助となれば幸いです。当社の専門領域については、https://www.doit.com/services/ をぜひご覧ください。
employed
Should be "deployed" I think :)
返信
retrieving
"r" should be upper case.
返信
本記事で取り上げる方式です。ユーザーの操作を必要とせず、ユーザーの代理としてアクションを実行できます。2-Legged OAuthフローで動作します。
Formatting should not be bold letters.
返信
すべての返信を見る
by
[GKE内部アプリケーションアクセスのモダナイゼーション:VPNからIAP対応の外部ゲートウェイへ\ \
2025年1月13日
by
[MCPサーバーとStrands AgentsによるAWSアーキテクチャ構築\ \
2025年9月22日
by
[AWS WAFとその先で活用するJA3・JA4フィンガープリント\ \
2025年4月10日
by
[VPCアーキテクチャパターン:AWSとGCPにおけるスタンドアロン型と集中型の比較\ \
2024年11月25日
by
[Stanfordがわずか8語でプロンプトエンジニアリングに終止符を打った(しかも本当に効いた)\ \
2025年10月19日
[A clap icon25K\ \
[2026年にClaude(およびあらゆるコーディングエージェント)で必須となる10のスキル\ \
3月9日
[A clap icon1K\ \
[ダッシュボードとデザインシステムの終焉\ \
2025年11月26日
[A clap icon6.5K\ \
[Anthropicが(新)Claude Code Autoモードを追加(パーミッションモードはもう不要)\ \
6日前
[A clap icon391\ \
by
[ローカルAI向けに、あなたはおそらく間違ったマシンを買っている — Mac Mini M4とMini PC、誰も語らない真実…\ \
3月20日
[A clap icon1.1K\ \
by
[30日間ChatGPTを使うのをやめてみた。脳に起きたことは恐ろしかった。\