GCPで認証が必要なAPIをテスト実行したときの認証周りのメモ。
- 次の
HTTP/REST
の手順に沿って実行する。
Google Cloud コンソール
OAuth同意画面
- “APIとサービス”→“OAuth同意画面"からOAuth同意画面を作成する
項目 | 値 |
---|---|
User Type | 外部 |
アプリ名 | (適当に設定) |
ユーザーサポートメール | (適当に設定) |
ディベロッパーの連絡先情報 | (適当に設定) |
スコープ | 必要なものを追加 |
テストユーザ | テストに使用するアカウントを追加 |
認証情報
- “APIとサービス”→“認証情報"からOAuthクライアントを作成する。
- “認証情報を作成”→“OAuthクライアントID”
項目 | 値 | その他 |
---|---|---|
アプリケーションの種類 | ウェブアプリケーション | |
名前 | (適当に設定) | |
承認済みのリダイレクトURI | http://localhost:8080/ | テスト用途なのでlocalhostに向けておく |
クライアント作成後に認証情報を記載したJSONをダウンロードしておく。
access tokenの取得
- ブラウザから次のURLにアクセス
https://accounts.google.com/o/oauth2/v2/auth?client_id=${CLIENT_ID}&redirect_uri=http://localhost:8080/&response_type=code&scope=${SCOPE}&access_type=offline&state=${NONCE}
- CLIENT_ID: OAuthクライアントのクライアントID
- SCOPE: 認可するスコープ。複数を指定する場合はスペース区切り(%20)で指定する
- NONCE: nonce
- アクセス後は認証画面が表示される
- “このアプリはGoogleで確認されていません”→“続行”
- 各scopeにチェック→“続行”
http://localhost:8080/
にリダイレクトされるので、クエリパラメータのcode
を取得する- 次のHTTPリクエストでaccess token, refresh tokenを取得する。
curl -X POST "https://oauth2.googleapis.com/token" \
-d "code=${CODE}" \
-d "client_id=${CLIENT_ID}" \
-d "client_secret=${CLIENT_SECRET}" \
-d "redirect_uri=http://localhost:8080/" \
-d "grant_type=authorization_code"
- レスポンス
refresh_token
は初回のレスポンスしか含まれない
{
"access_token": "${ACCESS_TOKEN}",
"expires_in": ${EXPIRES_IN},
"refresh_token": "${REFRESH_TOKEN}",
"scope": "${SCOPE}",
"token_type": "Bearer"
}
APIリクエスト
- access tokenを
Authorization
ヘッダに設定してリクエストする
curl -H "Authorization: Bearer ${ACCESS_TOKEN}"
access tokenの更新
- refresh tokenを使ってaccess tokenを更新する
curl -X POST "https://oauth2.googleapis.com/token" \
-d "client_id=${CLIENT_ID}" \
-d "client_secret=${CLIENT_SECRET}" \
-d "grant_type=refresh_token"
-d "refresh_token=${REFRESH_TOKEN}" \
- レスポンス
{
"access_token": "${ACCESS_TOKEN}",
"expires_in": ${EXPIRES_IN},
"scope": "${SCOPE}",
"token_type": "Bearer"
}
権限の剥奪
- “Googleアカウントを管理”→“セキュリティ”→“アカウントにアクセスできるサードパーティアプリ”
- OAuthクライアントを選択して"アクセス権を削除”