共有ドライブ書き込み
ドメイン全体の委任 domain wide delegation
セキュリティ > API の制御 > ドメイン全体の委任
サービスアカウント一覧
-
test-spread-sheet-api
: プロジェクトID
サービスアカウント詳細
-
114320389621734378354
= client_id or サービスアカウントid
許可リスト登録済みドメイン
アプリ > Google Workspace > ドライブとドキュメント の設定 > 共有設定
API / サービスの詳細
クライアント・クレデンシャルズフロー
サービスアカウントという専用のアカウントとして認証することで、ユーザーへの認証は行わずアプリが直接サーバーにアクセスを要求する方式です。
OAuth2.0で定義されているクライアント・クレデンシャルズフローにあたります
既に管理者から許可されているため、ドメイン内のユーザーデータにアクセスする際ユーザーの同意などは不要になります。また、許可する際にスコープを指定できるため、許可された範囲外のデータにはアクセスできないようにもできます。
私はAWSで言うAssume Roleを許可する設定だと認識しました
credential作成: domain wide delegation利用
from google.oauth2 import service_account
SCOPES = [
"https://www.googleapis.com/auth/sqlservice.admin"
]
SERVICE_ACCOUNT_FILE = "/path/to/service.json"
credentials = service_account.Credentials.from_service_account_file(
SERVICE_ACCOUNT_FILE,
scopes=SCOPES,
subject="user@domain.com",
)
- サービスアカウントに対するAPIリクエストの認可は
user@domain.com
に対するものとして認可される
scope一覧
https://www.googleapis.com/auth/drive See, edit, create, and delete all of your Google Drive files
https://www.googleapis.com/auth/drive.file See, edit, create, and delete only the specific Google Drive files you use with this app
https://www.googleapis.com/auth/drive.readonly See and download all your Google Drive files
https://www.googleapis.com/auth/spreadsheets See, edit, create, and delete all your Google Sheets spreadsheets
https://www.googleapis.com/auth/spreadsheets.readonly See all your Google Sheets spreadsheets
google.auth.exceptions.RefreshError: (
"invalid_scope: https://www.googleapis.com/auth/drive.file\t is not a valid audience string.",
{
"error": "invalid_scope",
"error_description": "https://www.googleapis.com/auth/drive.file\t is not a valid audience string.",
},
)