[Python] Google APIのOAuthを組み込みアプリケーションで行う方法
こんにちは、@yoheiMuneです。
Webサービスではなく、コマンドラインベースなどのアプリケーション(=Installed Application)でGoogle APIをOAuth経由で利用する場合に、OAuth認証を行う方法をブログに書きたいと思います。
OAuth 2.0 | API Client Library for Python | Google Developers
そして、APIをOAuth経由で利用する場合に、アプリケーションの形態(以下)により、認証情報の取得方法が少しずつ異なります。
[API] Google APIを使う際に、APIを有効化して認証キーを取得する方法
今回は上記の結果、以下のようなOAuth認証用のJSONファイルを取得できていればOKです。
引用:https://developers.google.com/identity/protocols/OAuth2InstalledApp#overview
また、Python用ライブラリを利用しますので、事前に以下でインストールを行います。
その他の指定方法は、Using OAuth 2.0 for Installed Applications | Google Identity Platform | Google Developersをご参照ください。
トークンが取得できたら、認証情報を作成します。
OAuth 2.0 | API Client Library for Python | Google Developers
Using OAuth 2.0 for Installed Applications | Google Identity Platform | Google Developers
最後になりますが本ブログでは、Python・Java・フロントエンド・機械学習など雑多に情報発信をしていきます。自分の第2の脳にすべく、情報をブログに貯めています。気になった方は、本ブログのRSSやTwitterをフォローして頂けると幸いです ^ ^。
最後までご覧頂きましてありがとうございました!
Webサービスではなく、コマンドラインベースなどのアプリケーション(=Installed Application)でGoogle APIをOAuth経由で利用する場合に、OAuth認証を行う方法をブログに書きたいと思います。
目次
Google APIをOAuth認証で利用する場合のパターン
Google APIは幾つかの認証形式で利用することができますが、その中でOAuth認証を用いた方法で利用することが可能です。OAuth認証を用いることで、各ユーザーのアカウント権限でAPIを利用できるようになります。OAuthについての詳細は以下をご覧ください。OAuth 2.0 | API Client Library for Python | Google Developers
そして、APIをOAuth経由で利用する場合に、アプリケーションの形態(以下)により、認証情報の取得方法が少しずつ異なります。
- Webアプリケーション
- AndroidまたはiPhoneアプリケーション
- 組み込みアプリケーション(Webブラウザ利用可)(☆今回はコレ)
- 組み込みアプリケーション(Webブラウザ利用できない)
利用対象のAPI有効化と認証キーの取得
Googleの各サービスをAPI経由で利用する場合に、事前にAPI有効化と認証キーの取得を行う必要があります。具体的な手順は以下で記載しましたので、そちらを参照いただけますと幸いです。[API] Google APIを使う際に、APIを有効化して認証キーを取得する方法
今回は上記の結果、以下のようなOAuth認証用のJSONファイルを取得できていればOKです。
# OAUth認証用のJSON例
{
"installed": {
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"client_id": "**クライアントID**",
"client_secret": "**クライアントシークレット**",
"project_id": "sample-project",
"redirect_uris": [
"urn:ietf:wg:oauth:2.0:oob",
"http://localhost"
],
"token_uri": "https://accounts.google.com/o/oauth2/token"
}
}
組み込みアプリケーション(Webブラウザ利用可)でOAuth認証を行う
この形態の場合には、以下のようなフローでOAuth認証を行います。
引用:https://developers.google.com/identity/protocols/OAuth2InstalledApp#overviewまた、Python用ライブラリを利用しますので、事前に以下でインストールを行います。
pip install --upgrade google-api-python-client
実装する
それではここから実装を行います。まずは必要なライブラリをimportします。import webbrowser from oauth2client.client import flow_from_clientsecrets from oauth2client.file import Storage次に、OAuth認証用のURLを取得して、ブラウザで表示します。
# 利用するAPIのスコープを指定
SCOPE = 'https://www.googleapis.com/auth/bigquery.readonly'
# 認証フローを作成
flow = flow_from_clientsecrets(
# API有効化時に取得したOAuth用のJSONファイルを指定
'secret/oauth2.json',
# スコープを指定
scope=SCOPE,
# ユーザーの認証後の、トークン受け取り方法を指定(後述)
redirect_uri='urn:ietf:wg:oauth:2.0:oob')
# 認証用URLを発行して、ブラウザで表示する
auth_uri = flow.step1_get_authorize_url()
webbrowser.open(auth_uri)
# トークンをユーザーが入力するまで、処理を待つ
token = input("Input your code > ")
上記実装のredirect_uriで、ユーザー認証OKだった場合に、どのようにトークンを受け取るかを指定できます。ここでは、認証後に以下のようにブラウザにトークンが表示される形式を採用しています。
その他の指定方法は、Using OAuth 2.0 for Installed Applications | Google Identity Platform | Google Developersをご参照ください。トークンが取得できたら、認証情報を作成します。
# 認証情報を作成する credentials = flow.step2_exchange(token)そして、最後にこの認証情報を今後使うために、ファイルに保存しておきます。
CREDENTIALS_FILE = "./secret/credentials" Storage(CREDENTIALS_FILE).put(credentials)ファイルに保存した結果は、以下のようなJSONファイルとなっており、API利用時に必要な
access_tokenや、認証情報が期限切れになった場合に再取得で使うrefresh_tokenなどが保存されます。
{
"access_token": "**アクセストークン**",
"client_id": "**クライアントID**",
"client_secret": "**クライアントシークレット**",
"refresh_token": "**リフレッシュトークン**",
"token_expiry": "2016-05-03T16:47:16Z",
/*他省略*/
}
その後は、以下のように認証情報をファイルから取得して、API利用することができます(詳細は別でブログを書きます)。
### BigQueryを利用する場合の例
# APIサービスを作成
credentials = Storage(CREDENTIALS_FILE).get()
http_auth = credentials.authorize(Http())
service = build('bigquery', 'v2', http=http_auth)
# API実行
body = {
"kind": "bigquery#queryRequest",
"query": "SELECT 1 AS dummy FROM [bigquery-public-data:hacker_news] LIMIT 1"
}
project_id = "sample-project"
result = service.jobs().query(projectId=project_id, body=body).execute(http_auth)
参考資料
今回の実装を行うために、以下のGoogleリファレンスを参照しました。OAuth 2.0 | API Client Library for Python | Google Developers
Using OAuth 2.0 for Installed Applications | Google Identity Platform | Google Developers
最後に
今回の内容は、急遽仕事で必要になったので実装しました。リファレンスを読むと以外に簡単にできることがわかりました。OAuthの面倒くさいハンドシェイク部分を、ライブラリがやってくれるので、GoogleのPythonライブラリはいい感じですね♪最後になりますが本ブログでは、Python・Java・フロントエンド・機械学習など雑多に情報発信をしていきます。自分の第2の脳にすべく、情報をブログに貯めています。気になった方は、本ブログのRSSやTwitterをフォローして頂けると幸いです ^ ^。
最後までご覧頂きましてありがとうございました!






