Intercambia tokens con la API de Cloud OAuth

Puedes usar la API de OAuth de Cloud (cloudoauth.googleapis.com) para intercambiar códigos de autorización o tokens de actualización por tokens de acceso de OAuth 2.0 y tokens de ID de OpenID Connect (OIDC) de corta duración de Google Cloud. En las integraciones de la federación de identidades de personal, tus aplicaciones pueden verificar los tokens de ID devueltos con las claves públicas de tu organización y usar los tokens de acceso para llamar a las APIs deGoogle Cloud en nombre de los usuarios federados.

Antes de comenzar

  1. Configura un grupo y un proveedor de Workforce Identity. Para obtener más información, consulta Configura la federación de identidades de personal.
  2. Registra un cliente de OAuth y crea credenciales de cliente. Para obtener más información, consulta Administra aplicaciones de OAuth.
  3. Habilita la API de OAuth de Cloud si aún no está habilitada.

    Roles necesarios para habilitar las APIs

    Para habilitar las APIs, necesitas el permiso serviceusage.services.enable. Si creaste el proyecto, es probable que ya tengas este permiso a través del rol de propietario (roles/owner). De lo contrario, puedes obtenerlo a través del rol de administrador de Service Usage (roles/serviceusage.serviceUsageAdmin). Obtén información para otorgar roles.

    Habilitar la API

Métodos de autenticación

Para autenticar tu cliente de OAuth con la API de OAuth de Cloud, pasa tu ID de cliente y el secreto del cliente de una de las siguientes maneras:

  • Autenticación básica de HTTP (recomendada): Pasa el ID de cliente y el secreto del cliente codificados en Base64 en el encabezado Authorization:

    -H "Authorization: Basic $(echo -n 'CLIENT_ID:CLIENT_SECRET' | base64)"
    
  • Parámetros del cuerpo de la solicitud: Pasa los parámetros client_id y client_secret en el cuerpo de la solicitud.

Intercambia un código de autorización por tokens

Después de que un usuario federado accede con su proveedor de identidad (IdP) en el extremo de autorización unificado deGoogle Cloud (https://auth.cloud.google/authorize), el extremo de autorización redirecciona al usuario al URI de redireccionamiento de tu aplicación con un código de autorización. Para intercambiar este código de autorización por un token de acceso, un token de actualización y un token de ID de OIDC, envía una solicitud HTTP POST al extremo con alcance de organización (usuario único):

  • Autenticación básica de HTTP (recomendada):

    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"
    
  • Parámetros del cuerpo de la solicitud:

    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"
    

Reemplaza lo siguiente:

  • ORGANIZATION_ID: Es el ID numérico de la organización de Google Cloud.
  • BASE64_ENCODED_CREDENTIALS: Es la cadena codificada en base64 de CLIENT_ID:CLIENT_SECRET.
  • AUTHORIZATION_CODE: Es el código de autorización que devuelve el extremo de autorización unificado de Google Cloud (https://auth.cloud.google/authorize).
  • REDIRECT_URI: Es el URI de redireccionamiento configurado en tu cliente de OAuth.
  • CLIENT_ID: Es tu ID de cliente de OAuth registrado.
  • CLIENT_SECRET: Es tu secreto del cliente de OAuth.

Cómo actualizar un token de acceso

Cuando un token de acceso vence, usa el tipo de permiso refresh_token para obtener un nuevo token de acceso de corta duración del extremo con permiso de organización (usuario único):

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"

Reemplaza lo siguiente:

  • ORGANIZATION_ID: Es el ID numérico de la organización de Google Cloud.
  • BASE64_ENCODED_CREDENTIALS: Es la cadena codificada en Base64 de CLIENT_ID:CLIENT_SECRET.
  • REFRESH_TOKEN: Es el token de actualización que el extremo del token devolvió anteriormente.
  • REDIRECT_URI: Es el URI de redireccionamiento configurado en tu cliente de OAuth.

Campos de respuesta de token

Cuando un intercambio de tokens se realiza correctamente, la API de OAuth de Cloud devuelve un estado HTTP 200 OK que contiene los siguientes campos:

Campo Tipo Descripción
access_token string Es el token de acceso de OAuth 2.0 que emite la API de OAuth de Cloud para llamar a las APIs de Google Cloud .
refresh_token string Es el token de actualización que se usa para obtener tokens de acceso nuevos cuando vence el token actual.
expires_in integer Es la vida útil restante del token de acceso en segundos (por lo general, 3599).
token_type string Es el tipo de token (por ejemplo, Bearer).
scope string Es una lista de los permisos asociados con el token.
id_token string Es el token de ID de OIDC que contiene las reclamaciones de identidad autenticadas.

Para obtener información sobre las respuestas de error que devuelve la API de OAuth de Cloud, consulta Errores de intercambio de tokens de la API de OAuth de Cloud.

Verifica el token de ID de OIDC

En el caso de las integraciones de OIDC de Looker, puedes verificar la firma criptográfica del id_token que devuelve la API de OAuth de Cloud con las claves web JSON (JWK) públicas de tu organización.

Recupera los JWK públicos de la organización de una de las siguientes maneras:

  • Consulta el extremo del conjunto de claves web JSON (JWKS) directamente: Envía una solicitud HTTP GET a https://cloudoauth.googleapis.com/v1/organizations/ORGANIZATION_ID/.well-known/jwks.json.
  • Usa el documento de descubrimiento de OIDC: Envía una solicitud HTTP GET al extremo de descubrimiento de OIDC (https://auth.cloud.google/oidc/organizations/ORGANIZATION_ID/.well-known/openid-configuration) para recuperar la URL del extremo de JWKS del campo jwks_uri.

En ambas URLs de extremos, reemplaza ORGANIZATION_ID por el ID numérico de la organización de Google Cloud .

¿Qué sigue?