OAuth2.0は認証用のプロトコルではなく、認可用のプロトコルとのこと...。
「ユーザーがアプリを使う時、アプリが認可サーバから権限を取得(その際にユーザーが同意する)し、
その認可された権限をもってリソースサーバーにアクセスする」らしい。なんのこっちゃ?
※書籍 :「雰囲気で使わずきちんと理解する!整理してOAuth2.0を使うためのチュートリアルガイド」を読んでとりあえず納得はしました...。
では、以下にOAuth2.0を用いてGMailの送受信をする為の
「STEP 0 : Google Cloud設定」、「STEP 1 : 認可コード取得」、「STEP 2 : アクセストークン取得」の例を示す。
「STEP 3: アクセストークンを用いてリソースサーバにアクセス」は、上記STEP 2で得たアクセストークンを用いて実施するらしい...。
STEP 0 : Google Cloud設定
- 設定手順
- https://console.cloud.google.com/ から 新しいプロジェクトを作成(プロジェクト名は任意の文字列)し、作成したプロジェクトを選択する。
- 三 から APIとサービス ( https://console.cloud.google.com/projectselector2/apis/dashboard ) を選択し、上の検索バーに "Gmail API"と入力し選択する。
- Gmail API で [有効にする」 をクリック → [認証情報の作成] を クリック
- 認証情報 : 「ユーザーデータ」を選択し[次へ]
- OAuth同意 : 設定情報(例)の認識情報作成時を参照
- スコープ : 設定情報(例)の認識情報作成時を参照
※ [スコープを追加または削除] から追加し、[保存して次へ]をクリック
- OAuthクライアントID : 設定情報(例)の認識情報作成時を参照
※ 入力して[追加]をクリック
- 認証情報
※ ダウンロード をクリックして認証情報をGETし、[完了]をクリック
ダウンロードデータ(例)
{"installed": {
"client_id":"************-********************************.apps.googleusercontent.com",
"project_id":"example0430",
"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":"******-****************************",
"redirect_uris":["http://localhost"]
}}
- クライアント ( https://console.cloud.google.com/auth/clients ) から上記で作成した OAuthクライアントID を編集
※ 対象 ( https://console.cloud.google.com/auth/audience ) にて [+ Add users]をクリックしてテストユーザーを追加する
(設定情報(例) の 確認場所=対象 を参照)。
- 設定情報(例)
項目
| 設定例
| 認識情報作成時
| 確認場所
| 備考
|
アプリ名
| gmail0430oauth2
| OAuth同意
| ブランディング
| 他のgoogleアプリとかぶらない名にする事
|
ユーザーサポートメール
| example0430@gmail.com
| OAuth同意
| ブランディング
| ユーザーのgmailから選択
|
デベロッパーの連絡先情報
| example0430@gmail.com
| OAuth同意
| ブランディング
| ユーザーサポートメールと同じで良い
|
スコープ(範囲)
| https://mail.google.com/
| スコープ
| データアクセス
| Gmail のすべてのメールの閲覧、作成、送信、完全な削除
|
アプリケーションの種類
| デスクトップアプリ
| OAuthクライアントID
| クライアント
|
|
名前
| desktop0430client01
| OAuthクライアントID
| クライアント
| コンソールでのクライアント識別
|
クライアントID
| ************-********************************.apps.googleusercontent.com
| -
| クライアント
| Google Cloud 自動生成ID
|
クライアントシークレット
| ******-****************************
| -
| クライアント
| Google Cloud 自動生成シークレット
|
公開ステータス
| テスト中
| -
| 対象
| 変更しない。つまり、[アプリを公開]しない事
|
ユーザーの種類
| 外部
| -
| 対象
|
|
テストユーザー
| example0430@gmail.com
| -
| 対象
| 自分のgmail等
|
- 確認場所
名称 | URL |
ブランディング | https://console.cloud.google.com/auth/branding |
対象 | https://console.cloud.google.com/auth/audience |
クライアント | https://console.cloud.google.com/auth/clients |
デーアアクセス | https://console.cloud.google.com/auth/scopes |
- プロジェクト削除方法
https://console.cloud.google.com/iam-admin/settings にアクセスし、選択したプロジェクトを「シャットダウン」する。
STEP 1 : 認可コード取得
認可サーバから認可コードを取得する。
- ロールとデータ
ロール
| データ
| 備考
|
リソースオーナー
| クライアントID, スコープ
| Google Cloudののデータを使用
|
認可サーバ(https://accounts.google.com/o/oauth2/auth)
| 認可コード
| アクセストークン取得用
|
- 認可サーバへのHTTPアクセス例
https://accounts.google.com/o/oauth2/auth?response_type=code
&client_id=*************-********************************.apps.googleusercontent.com
&state=xyz
&scope=https://mail.google.com/
&redirect_uri=http://127.0.0.1/callback
Google Cloudのconsoleの[対象]で追加したテストユーザーの認証を求められる。
- 認可サーバからの返信の例
そして下記の内容が返ってくる(code=... が認可コード)。
http://127.0.0.1/callback?state=xyz
&code=*****_*******************************-_**********************************
&scope=https://mail.google.com/
※stateはリソースオーナー側でランダム生成した値。認可サーバからの返信に同じ値のstateがる事を確認する。
STEP 2 : アクセストークン取得
トークンサーバからアクセストークンを取得する。
- ロールとデータ
ロール
| データ
| 備考
|
クライアント
| クライアントID, クライアントシークレット, 認可コード
| Google CloudののデータとSTEP 1で取得したコードを使用
|
トークンサーバ(https://oauth2.googleapis.com/token)
| アクセストークン、リフレッシュトークン
| リソースサーバアクセス用
|
- トークンサーバーへのcurlでのアクセス例
curl -d "client_id=*************-********************************.apps.googleusercontent.com" \
-d "client_secret=******-****************-***********" \
-d "redirect_uri=http://127.0.0.1/callback" \
-d "grant_type=authorization_code" \
-d "code=*****_*******************************-_**********************************" \
https://oauth2.googleapis.com/token
- トークンサーバからの返信の例
下記のようにアクセストークンとリフレッシュトークンが返ってくる。
{
"access_token": "****.**********************************************************************-********************************-********************************************************-********************************************************",
"expires_in": 3599,
"refresh_token": "*******************************-***************************************************************_*******",
"scope": "https://mail.google.com/",
"token_type": "Bearer",
"refresh_token_expires_in": 604799
}%
参考資料
- 書籍 :「雰囲気で使わずきちんと理解する!整理してOAuth2.0を使うためのチュートリアルガイド」