GoogleAPI、OAuth2.0の有効化の手順

記事タイトルとURLをコピーする

はじめに

GoogleAPIを使う機会があり、他サービスのAPIとは違う印象を受けたので、利用までの手順をまとめてみました。 参考になればと思います。

OAuth2.0とは

他サービスのAPIと最も違う点が、OAuth2.0だと思います。

APIを利用してユーザーデータを参照する場合、クライアントがデータを参照する権限を持っているかを調べる必要があります。

そうしないと誰でも参照できてしまい、安全ではありません。

なので、あらかじめアクセストークンという許可されていることを示すものをクライアントに渡しておきます。 このアクセストークンの要求と払い出しの部分を標準化したものをOAuth2.0と言います。

OAuthについてイラストなどで分かりやすく解説してあるので調べてみてください。

手順

プロジェクトの作成

GoogleではプロジェクトごとにAPIを設定していきます。

特権管理者でG suiteにログインしてプロジェクト管理ページにアクセスします。

https://console.developers.google.com/project

「プロジェクトを作成」にてプロジェクトを作成してください。

f:id:swx-tani:20210107180804p:plain

必要なAPIを有効化

作成したプロジェクトが選択されていることを確認して、左のメニューから「ライブラリ」を選択してください。 今回はAdmin SDK APIを有効にします。

カレンダーを操作したい場合は、Google Calendar APIを、Gmailを操作したい場合は、Gmail APIを有効化します。

f:id:swx-tani:20210107172052p:plain

OAuth 同意画面の設定

次に左のメニューから「OAuth 同意画面」を選択してください。 f:id:swx-tani:20210107180908p:plain

f:id:swx-tani:20210107180918p:plain

f:id:swx-tani:20210107180932p:plain

必須項目の「アプリ名」、「ユーザー サポートメール」、「デベロッパーの連絡先情報」を入力してください。

次にスコープを登録します。 スコープとは、ユーザーに許可を求める権限を表します。 必要なスコープにチェックを入れて「更新」を押します。 今回は、ユーザーの表示と管理のスコープを付けています。

f:id:swx-tani:20210107182840p:plain

認証情報の設定

左のメニューから「認証情報」を選択してください。 「認証情報を作成」から、「OAuthクライアントID」を選択してください。

f:id:swx-tani:20210107181041p:plain

「作成」を押すと「クライアントID」と「クライアントシークレット」が作成されます。 ダウンロードボタンを押して認証情報が書かれたファイルをダウンロードしてください。 「credentials.json」に名前を変更してください。

f:id:swx-tani:20210107181907p:plain

これで準備が整いました。 いよいよ、APIを叩いていきます。

API実行

Admin SDKクイックスタートのPythonサンプルを実行していきます。

Python Quickstart  |  Directory API  |  Google Developers

ライブラリのインストール
$ pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib
コード

quickstart.pyを作成して、下記のコードを書き込んでください。

from __future__ import print_function
import pickle
import os.path
from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request
 
SCOPES = ['https://www.googleapis.com/auth/admin.directory.user']
 
def main():
    """ドメイン内の最初の10人のユーザーのメールアドレスと名前を出力する。
    """
    creds = None
 
    if os.path.exists('token.pickle'):
        with open('token.pickle', 'rb') as token:
            creds = pickle.load(token)
    
    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            creds.refresh(Request())
        else:
            flow = InstalledAppFlow.from_client_secrets_file(
                'credentials.json', SCOPES)
            creds = flow.run_local_server(port=0)
        
        with open('token.pickle', 'wb') as token:
            pickle.dump(creds, token)
 
    service = build('admin', 'directory_v1', credentials=creds)
    
    print('Getting the first 10 users in the domain')
    results = service.users().list(customer='my_customer', maxResults=10,
                                orderBy='email').execute()
    users = results.get('users', [])
 
    if not users:
        print('No users in the domain.')
    else:
        print('Users:')
        for user in users:
            print(u'{0} ({1})'.format(user['primaryEmail'],
                user['name']['fullName']))
 
if __name__ == '__main__':
    main()
実行する

この時、注意点として、認証情報の設定でダウンロードしたcredentials.jsonをquickstart.pyと同じディレクトリに置いておいてください。

$ python quickstart.py 
Please visit this URL to authorize this application: https://accounts.google.com/o/oauth2/auth.............................

URLを開いて認証を許可すると登録されているユーザーの情報が出力されます。 f:id:swx-tani:20210107190524p:plain

f:id:swx-tani:20210107190513p:plain

2回目からは認証を求められずに結果が表示されます。

$ python quickstart.py 
Getting the first 10 users in the domain
Users:
メールアドレス (名前)
・
・
・

以上がOAuth2.0の有効化とAPIを叩くまでの手順となります。

まとめ

GoogleAPIを触ってみて、初めて認証の仕組みを意識しました。 普段何気なく使っていますが、私たちの大切なデータはこのように守られていることを知る良いきっかけになりました。

ご覧いただきありがとうございました。