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

Cloud OAuth API(cloudoauth.googleapis.com)を使用すると、認証コードまたは更新トークンを有効期間の短い Google CloudOAuth 2.0 アクセス トークンと OpenID Connect(OIDC)ID トークンに交換できます。Workforce Identity 連携の統合では、アプリケーションは組織の公開鍵を使用して返された ID トークンを検証し、アクセス トークンを使用して、連携ユーザーに代わってGoogle Cloud API を呼び出すことができます。

始める前に

  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 で OAuth クライアントを認証するには、次のいずれかの方法でクライアント ID とクライアント シークレットを渡します。

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

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

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

連携ユーザーがGoogle Cloudの統合認可エンドポイント(https://auth.cloud.google/authorize)で ID プロバイダ(IdP)にログインすると、認可エンドポイントは認可コードを使用してユーザーをアプリケーションのリダイレクト URI にリダイレクトします。この認証コードをアクセス トークン、更新トークン、OIDC ID トークンと交換するには、組織スコープ(シングルテナント)のエンドポイントに HTTP POST リクエストを送信します。

  • HTTP 基本認証(推奨):

    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"
    

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

  • ORGANIZATION_ID: 実際の数値 Google Cloudの組織 ID
  • BASE64_ENCODED_CREDENTIALS: CLIENT_ID:CLIENT_SECRET の base64 でエンコードされた文字列。
  • AUTHORIZATION_CODE: Google Cloudの統合認証エンドポイント(https://auth.cloud.google/authorize)から返された認証コード。
  • REDIRECT_URI: OAuth クライアントに構成されているリダイレクト URI。
  • 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"

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

  • ORGANIZATION_ID: 実際の数値 Google Cloudの組織 ID
  • BASE64_ENCODED_CREDENTIALS: CLIENT_ID:CLIENT_SECRET の base64 でエンコードされた文字列。
  • REFRESH_TOKEN: トークン エンドポイントから以前に返された更新トークン。
  • REDIRECT_URI: OAuth クライアントに構成されているリダイレクト URI。

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

トークン交換が成功すると、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 トークン交換エラーをご覧ください。

OIDC ID トークンを検証する

Looker OIDC 統合の場合、組織の公開 JSON Web Key(JWK)を使用して、Cloud OAuth API から返された id_token の暗号署名を検証できます。

次のいずれかの方法で、組織の公開 JWK を取得します。

  • JSON Web Key Set(JWKS)エンドポイントに直接クエリを実行する: HTTP GET リクエストを https://cloudoauth.googleapis.com/v1/organizations/ORGANIZATION_ID/.well-known/jwks.json に送信します。
  • OIDC ディスカバリ ドキュメントを使用する: HTTP GET リクエストを OIDC ディスカバリ エンドポイント(https://auth.cloud.google/oidc/organizations/ORGANIZATION_ID/.well-known/openid-configuration)に送信して、jwks_uri フィールドから JWKS エンドポイント URL を取得します。

両方のエンドポイント URL で、ORGANIZATION_ID を数値の Google Cloud 組織 ID に置き換えます。

次のステップ