Google APIのクライアント認証情報を取得する

# はじめに
Gmailからメールのデータを受け取っていい感じに処理するpythonスクリプトを書いています。
[Quickstart](https://developers.google.com/gmail/api/quickstart/python) を使えばAPIの有効化からクライアント情報（credentials.json）の取得まで１クリックで済んでしまいます。
この記事では、あえて手動で一から設定するとどうなるかを書いていきます。

今回はGmail APIを使いましたが、他のAPIでも基本的な手順は同じだと思います。

# Gmail APIのクライアント認証情報を取得する
[Quickstart](https://developers.google.com/gmail/api/quickstart/python) でいうところの [Step 1: Turn on the Gmail API](https://developers.google.com/gmail/api/quickstart/python#step_1_turn_on_the) を手動で設定する手順です。

## プロジェクトの作成

[Google API Console](https://console.developers.google.com/apis/) にアクセスします。
プロジェクト一覧ダイアログ（左上の「Google APIs」ロゴの右）から、新しいプロジェクトを作成します。

![Gmail 2020-02-22 171133.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233131/3900af5f-11bf-cb28-ba98-62d199db828c.png)

![Gmail 2020-02-22 171725.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233131/b4a4bdb7-af3a-d334-424c-4789c3fb7c15.png)


## Gmail API を有効化

[APIライブラリ](https://console.developers.google.com/apis/library) にアクセスします。

![Gmail 2020-02-22 224209.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233131/20c396a7-db61-e7fe-8636-ada37dd721aa.png)

先ほど作成したプロジェクトが選択されていることを確認して、Gmail APIを検索します。

![Gmail 2020-02-22 172210.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233131/566c227d-0018-cdc4-a842-061cee8d4ba6.png)

Gmail API を有効化します。

## 同意画面と認証情報の作成

自動的に Gmail API の管理画面に移動します。
![Gmail 2020-02-22 172329.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233131/abab80b2-1170-d195-c9fc-9000dcb917be.png)
「認証情報を作成」をクリックするか、左側のメニューから「認証情報」→「+認証情報を作成」→「ウィザードで選択」と進みます。

![Gmail 2020-02-22 172638.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233131/6b320d89-c8b3-2803-3251-df44521440c7.png)

今回はPythonスクリプトからAPIを利用するので、APIを呼び出す場所は「その他のUI（Windows、CLIツールなど）」を選択しました。
また、ユーザーの受信メールの情報を取得したいので、アクセスしたいデータの種類は「ユーザーデータ」を選択しました。

ここで選択する内容によってこの先のフロー、作成される認証情報が変わってきます。

今回は「ユーザーデータ」を選択しているので、同意画面を作成する必要があります。
（よくある「このアプリケーションを信頼しますか？」的な画面です）
ダイアログが出てくるので、「同意画面を設定」をクリックします。

![Gmail 2020-02-22 172842.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233131/4ea7009f-d3db-d6d3-5bfa-c3e3f229ec34.png)


![Gmail 2020-02-22 172955.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233131/5cedd3c8-a77b-f728-c5b8-eecded7980f9.png)

User Type を選択し、同意画面を作成します。
今回は個人のアカウントなので「外部」にしました。

![Gmail 2020-02-22 173133.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233131/5c0702f3-beda-f86d-6040-dd6ae1744882.png)

アプリケーション名などを適当に設定し、保存します。
※遊び心でアプリケーションロゴを設定しようとしたら、色々と確認が必要になり面倒なことになりました…。なりすまし対策でしょうか。

認証情報の作成画面に戻ります。
クライアントIDを作成します。

![Gmail 2020-02-22 173451.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233131/620ccaa0-bf07-cb10-5a2c-50a0f8826ca5.png)

認証情報のJSONファイルをダウンロードします。
このJSONファイルが、[Quickstart](https://developers.google.com/gmail/api/quickstart/python) の [Step 1: Turn on the Gmail API](https://developers.google.com/gmail/api/quickstart/python#step_1_turn_on_the) で作成される credentials.json にあたります。

# おわりに
以上、[Gmail API Quickstart](https://developers.google.com/gmail/api/quickstart/python) の [Step 1](https://developers.google.com/gmail/api/quickstart/python#step_1_turn_on_the) を手動で設定する手順でした。

今回の手順だけでもGmail APIを使うことはできますが、ユーザーの同意画面（トークンの発行可否を確認する）で警告が出てしまいます。
![Gmail 2020-03-04 214509.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233131/67b8c7cc-5abb-7354-01c3-6cba68d7f946.png)

アプリを公開する際には、別途確認リクエストをする必要があります。

credentials.json の中にclient_secretがありますが、これがどんな役割のものなのかがいまいち分かりません。
OAuth2.0について調べてみると、ネイティブアプリの場合はclient secretを持たないことになっているようですが…。
この辺を理解できたらまた何か書きたいと思います。