Cloud OAuth API でトークンを交換する

このガイドでは、Workforce Identity 連携の統合で Cloud OAuth API(cloudoauth.googleapis.com)を使用して、外部認証情報、認可コード、更新トークンを Google Cloud アクセス トークンと交換する方法について説明します。

始める前に

  1. Workforce Identity プールとプロバイダを構成します。詳細については、Workforce Identity 連携を構成するをご覧ください。
  2. OAuth クライアントを登録し、クライアント認証情報を作成します。詳細については、OAuth アプリケーションを管理するをご覧ください。
  3. Cloud OAuth API を有効にします。

    API を有効にするために必要なロール

    API を有効にするには、serviceusage.services.enable 権限が必要です。プロジェクトを作成した場合は、オーナーロール(roles/owner)を介してこの権限がすでに付与されている可能性があります。それ以外の場合は、Service Usage 管理者ロール(roles/serviceusage.serviceUsageAdmin)を介してこの権限を取得できます。ロールを付与する方法をご覧ください。

    API の有効化

認証方法

Cloud OAuth API は、次の 2 つのクライアント認証方法をサポートしています。

  • HTTP Basic 認証(推奨): Base64 でエンコードされたクライアント ID とクライアント シークレットを Authorization ヘッダーで渡します。

    -H "Authorization: Basic $(echo -n 'CLIENT_ID:CLIENT_SECRET' | base64)"
    
  • リクエスト本文パラメータ: リクエストの本文で client_id パラメータと client_secret パラメータを渡します。

認証コードをトークンと交換する

Google Cloud 認可コードをアクセス トークンと更新トークンに交換するには、HTTP POST リクエストを送信します。

  • 組織スコープ(シングルテナント)エンドポイント

    curl -X POST https://cloudoauth.googleapis.com/v1/organizations/ORGANIZATION_ID/token \
    -H "Authorization: Basic BASE64_ENCODED_CREDENTIALS" \
    -H "Content-Type: application/x-www-form-urlencoded" \
    --data-urlencode "grant_type=authorization_code" \
    --data-urlencode "code=AUTHORIZATION_CODE" \
    --data-urlencode "redirect_uri=REDIRECT_URI"
    

    リクエスト本文の認証情報

    curl -X POST https://cloudoauth.googleapis.com/v1/organizations/ORGANIZATION_ID/token \
    -H "Content-Type: application/x-www-form-urlencoded" \
    --data-urlencode "grant_type=authorization_code" \
    --data-urlencode "code=AUTHORIZATION_CODE" \
    --data-urlencode "redirect_uri=REDIRECT_URI" \
    --data-urlencode "client_id=CLIENT_ID" \
    --data-urlencode "client_secret=CLIENT_SECRET"
    

次のように置き換えます。

  • BASE64_ENCODED_CREDENTIALS: CLIENT_ID:CLIENT_SECRET の Base64 エンコード文字列。
  • AUTHORIZATION_CODE:Google Cloudによって発行された認証コード。
  • REDIRECT_URI: OAuth クライアントで構成されたリダイレクト URI。
  • ORGANIZATION_ID: 実際の数値 Google Cloudの組織 ID。
  • CLIENT_ID: 登録済みの OAuth クライアント ID。
  • CLIENT_SECRET: OAuth クライアント シークレット。

アクセス トークンを更新する

アクセス トークンの有効期限が切れたら、refresh_token 権限付与タイプを使用して新しい有効期間の短いアクセス トークンを取得します。

  • 組織スコープ(シングルテナント)エンドポイント

    curl -X POST https://cloudoauth.googleapis.com/v1/organizations/ORGANIZATION_ID/token \
    -H "Authorization: Basic BASE64_ENCODED_CREDENTIALS" \
    -H "Content-Type: application/x-www-form-urlencoded" \
    --data-urlencode "grant_type=refresh_token" \
    --data-urlencode "refresh_token=REFRESH_TOKEN" \
    --data-urlencode "redirect_uri=REDIRECT_URI"
    

REFRESH_TOKEN は、トークン エンドポイントが以前に返した更新トークンに置き換えます。

トークン レスポンス フィールド

トークン交換が成功すると、Cloud OAuth API は次のフィールドを含む HTTP 200 OK ステータスを返します。

フィールド タイプ 説明
access_token string Google Cloud API を呼び出すために Cloud OAuth API によって発行された OAuth 2.0 アクセス トークン。
refresh_token string 現在のトークンの有効期限が切れたときに新しいアクセス トークンを取得するために使用される更新トークン。
expires_in integer アクセス トークンの残り有効期間(秒単位)(通常は 3599)。
token_type string トークンタイプ(Bearer など)。
scope string トークンに関連付けられているスコープのリスト。
id_token string 認証された ID クレームを含む OIDC ID トークン。

Cloud OAuth API から返されるエラー レスポンスについては、Cloud OAuth API トークン交換エラーをご覧ください。

次のステップ