GoogleAPI OAuth認証解説
GoogleAPIを仕事で使ったので、その認証方式の一つOAUth認証について書きます。
巷にはいくつか書かれていますが、もう少しマジのガチの初心者向けに書きます。
まず以下を参考にjsonファイルを取得してください(以下ページの『認証情報の設定』まで行ってください。)
cf https://blog.serverworks.co.jp/2021/01/08/130956
作成しているpythonファイルのディレクトリーに同jsonファイルを置いてください。まず最初にコードをどうぞ。
python関連ライブラリ。
import sys
import os
from pydrive.auth import GoogleAuth
import gspread
#GoogleOauth認証関連ライブラリ。
from google.auth.transport.requests import Request
from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError
from apiclient.http import MediaFileUpload
from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
#ダウンロードした認証情報が保管してあるローカルのフォルダへのパス。GoogleAPIの認証画面で取得したjsonファイルを格##納するディレクトリーに格納。
CREDENTIAL_DIR = "~"
#認証情報ファイルまでのパス
CLIENT_SECRET_FILE = os.path.join(CREDENTIAL_DIR, 'client_secret.json')
#一旦API認証が成功した後の認証情報を記録するファイルのパス
CREDENTIAL_PATH = os.path.join(CREDENTIAL_DIR, 'credential.json')
#GoogleAPIで用いたAppNameを使用。
APPLICATION_NAME = "~"
#以下で操作する範囲のAPIエンドポイントを定義。
SCOPES = "https://www.googleapis.com/auth/spreadsheets"
#OAuth認証。
def get_credential():
#credentialファイルが存在すれば、それで認証する。
creds = None
if os.path.exists(CREDENTIAL_PATH):
#credsに返り値であるcredentialsが格納される。
creds = Credentials.from_authorized_user_file(CREDENTIAL_PATH, SCOPES)
# 未認証だった場合は許可を求める(ブラウザ認証)。
#credsに代入されていない場合、または、tokenが代入されていてもexpireしている場合次のif文の処理に移る。
if not creds or not creds.valid:
#credsに代入されていて、expireされていて、OAuthがtokenをrefreshする場合。
if creds and creds.expired and creds.refresh_token:
#アクセスtokenをrefreshする。括弧内のparameterはhttp request。
creds.refresh(Request())
else:
#client_secrets_fileからFlowインスタンスを生成。
flow = InstalledAppFlow.from_client_secrets_file(
CLIENT_SECRET_FILE, SCOPES)
#OAuth2.0のcreedentialに返す。credsに代入、
creds = flow.run_local_server(port=0)
# 次回のためにcredential.jsonというファイルを書き込み権限で起案し、to_jsonでcredentialをJSON形式に生成。
with open('credential.json', 'w') as token:
token.write(creds.to_json())
return creds
上記の通りで、コメントアウトしてる箇所を参照いただければ幸いです。基本的には、まずquich startを参照しています。https://developers.google.com/people/quickstart/python
google.oauthを用いる以外も、ouath2clientを用いた方法もありますが、非推奨なので進めません。
"Note: oauth2client is now deprecated. No more features will be added to the libraries and the core team is turning down support. We recommend you use google-auth and oauthlib. For more details on the deprecation, see oauth2client deprecation."
google.oauthのモジュールは右を参考にしてください。
https://google-auth.readthedocs.io/en/stable/reference/google.oauth2.credentials.html
return でcredsを返してるのは次の関数で、関連apiを呼ぶときに認証情報としてそれをひっぱてくるためです。例えば、gspreadを用いるなら右みたいに使います。gc = gspread.authorize(creds)
以上です。desktopアプリケーションでgoogleapiコンソール上で設定しましたが、1週間超えると再取得が必要になってきます。これは元からの仕様っぽいです。その時はすでに取得しているcredentialファイルを削除して改めてブラウザ認証で新しいcredentialを取得する必要があります。上のコードは私のgithubにあるので、urlおいときます。
https://github.com/Chimay-0426/OAuth_Authen/blob/main/How%20to%20OAuth2.0
もしご質問などあれば、コメント他ご連絡いただければ幸いです。
執筆者:SHIMMEI
この記事が気に入ったらサポートをしてみませんか?