Google APIの利用で Client secrets must be for a web or installed app. と怒られる

https://developers.google.com の Quick Start などを参考に Google API を使うプログラムを作ったら、Client secrets must be for a web or installed app. というエラーが発生した。という場合

原因

OAuth 2.0 クライアント ID ではなく、サービスアカウントのキー (json ファイル)を指定すると発生する。メッセージの訳は「ウェブアプリかインストールされたアプリのクライアントシークレットを使え」ということだが、そういうこと。

対策

json ファイルを読み込むときに、InstalledAppFlow ではなくサービスアカウント専用のオブジェクトを利用する

from google_auth_oauthlib.flow import InstalledAppFlow
from google.oauth2 import service_account
flow = InstalledAppFlow.from_client_secrets_file(creds_path, scopes)
creds = flow.run_local_server(port=0)
creds = service_account.Credentials.from_service_account_file(creds_path, scopes=scopes)

Google APIの利用で Client secrets must be for a web or installed app. と怒られる” への1件のフィードバック

コメントは停止中です。