[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をフォローして頂けると幸いです ^ ^。
最後までご覧頂きましてありがとうございました!