今回は、GmailをGAS(Google Apps Script)を使わずにPythonやローコード/ノーコードツールからアクセスするための前準備としてOAuth2認証を行いGmail APIにアクセスするまでの準備について説明していきたいと思います。※ちなみに、アクセス元のツールとしてはAlteryxを想定していますが、Gmail APIを使うためにはリフレッシュトークンなどを取得しないといけないため、その行い方がメインとなります
本ブログは基本的にAlteryxの記事が中心ですが、このOAuth2認証だけ記事として独立させたのは様々な記事、ドキュメントを見てもそのままうまくいくケースがなく、何かしら説明が端折られていてよくわからないポイントがあったので、備忘録代わりに書いているということになります。
GmailAPIを使うためにやるべきこと
やるべきことは以下のとおりです。
- GCPの管理画面にて以下を実行
- GmailAPIを有効化
- OAuth2.0クライアントIDの作成
- OAuth完了画面の設定
- OAuth2.0認証の実行
- ブラウザにOAuth2.0認証をするためのURLを貼り付けて認証を行い、codeを取得
- curlコマンドを使い、所定の方式でアクセスを行いリフレッシュトークンを取得
となります。ここまで行うことで、GmailAPIに必要となるクライアントID、クライアントシークレット、リフレッシュトークンが取得できます。
それでは順次やっていきましょう。
1.GCPの管理画面で行うこと
ここでは以下3点を行います。
- GmailAPIを有効化
- OAuth2.0クライアントIDの作成
- OAuth同意画面の設定
GmailAPIを有効化
これは非常に簡単です。GCPの管理画面にて「APIとサービス」を開き、「有効なAPIとサービス」の画面に遷移しましょう。
次の画面にて、下の方(以下スクショの赤色の部分)にGmail APIが表示されていなければAPIを追加する必要があります。
追加する場合は、上の方にある「ENABLE APIS AND SERVICES」を選択します。
その後APIライブラリに遷移するため、検索ボックスで「gmail」などで検索します。
以下のように表示されるため、「Gmail API」をクリックします。
続いて、「有効にする」ボタンをクリックしましょう。
ここまでは特に注意ポイントはありません。
OAuth2.0クライアントIDの作成
次は、OAuth2.0クライアントIDを作っていきます。ここで作ったIDを使ってAPIに接続していくことになります。
GCPの管理画面にて「APIとサービス」を開き、「認証情報」の画面に遷移しましょう。
次に、「+認証情報を作成」をクリックします。
ドロップダウンメニューから「OAuthクライアントID」を選択します。
以下の通り設定します。
- アプリケーションの種類:デスクトップアプリ
- 名前:適当なわかりやすい名前
必要事項を入力したら「作成」をクリック。
これでOAuthクライアントIDが完成します。必要情報(クライアントID、クライアントシークレット)が表示されているのでコピーしておきましょう。JSONファイルをダウンロードしておくと必要な情報はすべてここに含まれます。
OAuth同意画面の設定
次に、OAuth同意画面の設定を行います。ここでかなり私騙されました・・・。
GCPの管理画面にて「APIとサービス」を開き、「OAuth同意画面」の画面に遷移しましょう(私以前にこの設定を行ってしまっていたので、新規の画面がよくわからない状況ですので、ご了承ください)。
下にスクロールします。
次はスコープなのですが、ここはいかにもここで必要な権限を設定してくれ的な感じで書いているのですが結論としてはここでは何も設定しなくてよかったです。むしろここでGmail関連のAPIを設定した後に公開ステージを「本番環境」にしようとするとGoogleの認証がないとダメです、というふうに言われて心折れそうになります。そもそも公開ステージは「テスト」で十分ですし、そもそも権限設定はここで行う必要はありませんでした。ということで、以下はすっ飛ばして「保存して次へ」をクリックしましょう。
しかしここでよくわからず散々検索しまくって時間を大きくロスしました・・・(しかも検索したところで全然このあたりに触れているものが見つかりませんでした)。
次も、、、省略可能なので省略しましょう。何も設定せず「保存して次へ」をクリックします。
最後に確認して終了です。
以上でGCP内の作業は終了です。
2.OAuth2.0認証の実行
ここまでで事前準備の事前準備と行った感じでした。ここからようやくAPIにアクセスするための認証用の情報を取得していくことになります。手順は2つです。基本的にはブラウザとコマンドライン(cmd.exe)の作業で手動となります。
ブラウザにOAuth2.0認証をするためのURLを貼り付けて認証を行い、codeを取得
OAuth2.0認証のアクセス先URLの作成方法
いよいよOAuth2.0認証を行います。アクセス先のURLは、
https://accounts.google.com/o/oauth2/auth?client_id=[あなたのクライアントID]&redirect_uri=http://localhost&scope=[スコープ]&access_type=offline&response_type=code
となります。実はredirect_uriをlocalhostにすると、WEBサーバーが立ち上がっているわけではないのでエラーになってしまうんですが、問題はありません。
クライアントIDは、OAuthクライアントを作成したときのクライアントIDを使います。「XXXX.apps.googleusercontent.com」みたいなやつですね。これは、OAuthクライアントを作ったときにダウンロードできるJSONファイルにも記載されています。例えば、JSONを開くと以下のようになっていると思います。
{"installed":{"client_id":"XXXXXX.apps.googleusercontent.com","project_id":"___your_project_id___","auth_uri":"https://accounts.google.com/o/oauth2/auth","token_uri":"https://oauth2.googleapis.com/token","auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs","client_secret":"XXXXXXXXXX","redirect_uris":["http://localhost"]}}
赤い部分がクライアントID、緑の部分が後で使うクライアントシークレットです。
それではスコープとはなんでしょうか?スコープはこちらで確認できますが、ずばり「https://mail.google.com」です。
結論としては、以下のURLで[あなたのクライアントID]を実際のクライアントIDにしてブラウザの検索ボックスに貼り付けてエンターキーを押すと、OAuth2.0認証が開始されます。
https://accounts.google.com/o/oauth2/auth?client_id=[あなたのクライアントID]&redirect_uri=http://localhost&scope=https://mail.google.com&access_type=offline&response_type=code
OAuth2.0認証
URLが正しければ以下のような画面が出てきます。ちなみに、OAuth同意画面の設定にて設定している公開ステージが「本番環境」と「テスト」で少し画面が異なります。以下は「本番環境」の画面です。
本番環境にしていると、以下のように警告画面が出るので無視して左下にある「詳細」をクリックします。
さらに左下に出てくるOAuth同意画面で設定したアプリの名前が出てくるのでそこをクリックします。
以下のように、「Gmailにアクセスできますよー」という記述があればほぼ成功です。この認証によってGmailにアクセスできるようになります。それを確認したのち、「続行」をクリックします。
さて、続行を押すと以下のようにエラー画面が見えると思います。これはリダイレクトURIにlocalhostを設定しているからです。ただ、この状態で問題ありません。落ち着いてブラウザのURLが表示されているところにある文字列を全選択してコピーして下さい。
これをメモ帳などに貼り付けてください。以下の通り「code=」から「&scope」の手前までがほしいcodeです。
つまり以下のようなイメージです。これもコピーして控えておいてください。
http://localhost/?code=[あなたのcode]&scope=https://mail.google.com/
これでブラウザの操作は終わりです。
curlコマンドを使い、所定の方式でアクセスを行いリフレッシュトークンを取得
次に、今まで取得した情報を使ってリフレッシュトークンを取得していきます。これはコマンドラインで行います。まずは、コマンドを作っていきたいと思います。コマンドとしてはcurlを使って実行していきます。
コマンドとしては以下のようなコマンドを作ります。クライアントIDは赤い文字の「あなたのクライアントID」のところに入れます。クライアントシークレットも青い文字の「あなたのクライアントシークレット」のところに入れます。さらに先程取得したcodeも緑色の文字の「あなたのcode」のところに入れます。
curl -d client_id=[あなたのクライアントID] -d client_secret=[あなたのクライアントシークレット] -d redirect_uri=http://localhost -d grant_type=authorization_code -d code=[あなたのcode] https://accounts.google.com/o/oauth2/token
それではいよいよ作ったコマンドを実行していきましょう。Windowsのタスクバーの検索ボックスで「cmd」と打てばコマンドプロンプトが表示されるので、クリックして黒い画面を出しましょう。
ここに先ほど作成したコマンドを貼り付けましょう。
この状態でエンターキーを押すとcurlコマンドが走ります。これによりJSON形式でリフレッシュトークンが得られます。
つまり、上の赤色の部分(ダブルクオーテーションは除きます)が欲しかったリフレッシュトークンです。これも控えておきましょう。
おめでとうございます
長かった道のりもこれで完了です。基本的にはここまでの過程で得られた「クライアントID」「クライアントシークレット」「リフレッシュトークン」を使ってAPIにアクセスしていきます。これらを控えておき、APIにアクセスするアプリで使うことになります。
コメント