メモ置き場

GCPのOAuth周りメモ

GCPで認証が必要なAPIをテスト実行したときの認証周りのメモ。

Google Cloud コンソール

OAuth同意画面

  • “APIとサービス"→"OAuth同意画面"からOAuth同意画面を作成する
項目
User Type外部
アプリ名(適当に設定)
ユーザーサポートメール(適当に設定)
ディベロッパーの連絡先情報(適当に設定)
スコープ必要なものを追加
テストユーザテストに使用するアカウントを追加

認証情報

  • “APIとサービス"→"認証情報"からOAuthクライアントを作成する。
    • “認証情報を作成"→"OAuthクライアントID”
項目その他
アプリケーションの種類ウェブアプリケーション
名前(適当に設定)
承認済みのリダイレクトURIhttp://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クライアントを選択して"アクセス権を削除”