1. OAuth同意画面の作成
- GCPコンソールから「APIとサービス」 > 「OAuth同意画面」を開く
- 「内部」 or 「外部」の選択 => 今回はテスト目的のため「内部」を選択
- アプリ名、ユーザサポートメール、デベロッパーの連絡先情報を埋める
- スコープを選択 => 今回はBigQuery APIを選択 (.../auth/bigquery)
2. OAuthクライアントIDの作成
- GCPコンソールから「APIとサービス」 > 「認証情報」を開く
- 「認証情報を作成」 > 「OAuthクライアントID」を選択
- アプリケーションの種類から「デスクトップアプリ」を選択 (今回はCLIで認可コードフローを確認するのが目的のためデスクトップにする)
3. 認可コードの取得
認可エンドポイント
https://accounts.google.com/o/oauth2/v2/auth
クエリパラメータ
- access_type=<online or offline> # リフレッシュトークンも必要ならばofflineにする
- client_id=<CLIENT_ID>
- prompt=concnet # ref. https://qiita.com/TakahikoKawasaki/items/185d34814eb9f7ac7ef3#21-%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88-prompt
- scope=<SCOPE>
- redirect_uri=<REDIRECT_URI>
- response_type=code # 認可コードフローの場合はcode
% CLIENT_ID=<CLIENT_ID>
% CLIENT_SECRET=<CLIENT_SECRET>
% REDIRECT_URI=$(echo "urn:ietf:wg:oauth:2.0:oob" | nkf -WwMQ | sed 's/=$//g' | tr = % | tr -d '\n')
% SCOPE=$(echo "https://www.googleapis.com/auth/bigquery" | nkf -WwMQ | sed 's/=$//g' | tr = % | tr -d '\n')
% echo "https://accounts.google.com/o/oauth2/v2/auth?redirect_uri=$REDIRECT_URI&prompt=consent&response_type=code&client_id=$CLIENT_ID&scope=$SCOPE&access_type=offline"
出力されたURLをブラウザで開くとOAuth同意画面にリダイレクトされ、同意すると認可コードが取得できる。
4. アクセストークン、リフレッシュトークンの取得
% CODE=$(echo "4/1AY0e-g5vTPqy0-6gGP7MiYyd9FUDFfVDdFU4v-_yI15D3ZtHIeKCbnZBPRM"|nkf -WwMQ|sed 's/=$//g'|tr = %|tr -d '\n')
% curl -XPOST 'https://oauth2.googleapis.com/token' -d "code=$CODE&redirect_uri=$REDIRECT_URI&client_id=$CLIENT_ID&client_secret=$CLIENT_SECRET&scope=&grant_type=authorization_code"
{
"access_token": "ya29.a0AfH6SMCGmatgsCNMzX5sCPAwISaFz3UZi5Q77sYeCDPCpCaVzw6ymzwFfbyk7aMiZO-tbfG1HHcKwYs3U336KpYZI5c3kOrtKPknaGtRyF8FghyhLIg_tgeBJEnH-Hy7BvrjF45Dl4d3PWkyRDDlu_r7XsDo",
"expires_in": 3599,
"refresh_token": "1//0eDwYfG3QKMPACgYIARAAGA4SNwF-L9IrpGmFDTnZWifWByUxc9UMq_xxBN7v6d-G3_9SEePoc3Pp5TFAXcICBTDL3wjfI3Pr2TU",
"scope": "https://www.googleapis.com/auth/bigquery",
"token_type": "Bearer"
}
5. アクセストークンの更新
% REFRESH_TOKEN=$(echo "1//0eDwYfG3QKMPACgYIARAAGA4SNwF-L9IrpGmFDTnZWifWByUxc9UMq_xxBN7v6d-G3_9SEePoc3Pp5TFAXcICBTDL3wjfI3Pr2TU"|nkf -WwMQ|sed 's/=$//g'|tr = %|tr -d '\n')
% curl -XPOST 'https://oauth2.googleapis.com/token' -d "client_secret=$CLIENT_SECRET&grant_type=refresh_token&refresh_token=$REFRESH_TOKEN&client_id=$CLIENT_ID"
6. アクセストークンの取り消し
curl 'https://accounts.google.com/o/oauth2/revoke?token=<access_token>'