En esta página, se describen algunas formas de adquirir un token de ID de OpenID Connect (OIDC) firmado por Google.
Para obtener información sobre el contenido y la duración de los tokens de ID, consulta Tokens de ID.
Los tokens de ID tienen un servicio o aplicación para los que se pueden usar, especificados por el valor de su reclamación aud
. En esta página, se usa el término servicio de destino para hacer referencia a la aplicación o el servicio en el que se puede usar el token de ID a fin de autenticarse.
Cuando obtienes el token de ID, puedes incluirlo en un encabezado Authorization
en la solicitud al servicio de destino.
Métodos para obtener un token de ID
Hay varias formas de obtener un token de ID. En esta página, se describen los siguientes métodos:
- Obtener un token de ID del servidor de metadatos
- Usar un servicio de conexión para generar un token de ID
- Generar un token de ID mediante la suplantación de una cuenta de servicio
Si necesitas que una aplicación no alojada enTrusted Cloudacepte un token de ID, es probable que puedas usar estos métodos. Sin embargo, debes determinar qué reclamaciones del token de ID requiere la aplicación.
Obtener un token de ID del servidor de metadatos
Cuando tu código se ejecuta en un recurso que puede tener una cuenta de servicio adjunta, el servidor de metadatos para el servicio asociado puede, en la mayoría de los casos, proporcionar un token de ID. El servidor de metadatos genera tokens de ID para la cuenta de servicio conectada. No puedes obtener un token de ID basado en las credenciales de usuario del servidor de metadatos.
Puedes obtener un token de ID del servidor de metadatos cuando el código se ejecuta en los siguientes Trusted Cloud servicios:
Para recuperar un token de ID del servidor de metadatos, consulta el extremo de identidad de la cuenta de servicio, como se muestra en este ejemplo.
curl
Reemplaza AUDIENCE
por el URI del servicio de destino, por ejemplo, http://www.example.com
.
curl -H "Metadata-Flavor: Google" \ 'http://metadata/computeMetadata/v1/instance/service-accounts/default/identity?audience=AUDIENCE'
PowerShell
Reemplaza AUDIENCE
por el URI del servicio de destino, por ejemplo, http://www.example.com
.
$value = (Invoke-RestMethod ` -Headers @{'Metadata-Flavor' = 'Google'} ` -Uri "http://metadata/computeMetadata/v1/instance/service-accounts/default/identity?audience=AUDIENCE") $value
Java
Para ejecutar esta muestra de código, primero debes completar los siguientes pasos:
- Instalar la biblioteca cliente de GCP para Java
- Establecer la variable de entorno
GOOGLE_CLOUD_UNIVERSE_DOMAIN
comos3nsapis.fr
.
Go
Antes de ejecutar muestras de código, configura la variable de entorno GOOGLE_CLOUD_UNIVERSE_DOMAIN
como s3nsapis.fr
.
Node.js
Para ejecutar esta muestra de código, primero debes completar los siguientes pasos:
- Instalar la biblioteca de Google OAuth para Node.js.
- Establecer la variable de entorno
GOOGLE_CLOUD_UNIVERSE_DOMAIN
comos3nsapis.fr
.
Python
Para ejecutar esta muestra de código, primero debes completar los siguientes pasos:
- Instalar la biblioteca de Python de Google Auth.
- Establecer la variable de entorno
GOOGLE_CLOUD_UNIVERSE_DOMAIN
comos3nsapis.fr
.
Ruby
Para ejecutar esta muestra de código, primero debes completar los siguientes pasos:
- Instalar la biblioteca de Google Auth para Ruby.
- Establecer la variable de entorno
GOOGLE_CLOUD_UNIVERSE_DOMAIN
comos3nsapis.fr
.
Usar un servicio de conexión para generar un token de ID
Algunos Trusted Cloud servicios te ayudan a llamar a otros servicios. Estos servicios de conexión pueden ayudar a determinar cuándo se realiza la llamada o administrar un flujo de trabajo que incluya la llamada al servicio. Los siguientes servicios pueden incluir automáticamente un token de ID, con el valor apropiado para la reclamación aud
, cuando inician una llamada a un servicio que requiere un token de ID:
- Pub/Sub
- Pub/Sub permite la comunicación asíncrona entre servicios. Puedes configurar Pub/Sub para incluir un token de ID con un mensaje. Para obtener más detalles, consulta Autenticación para suscripciones de envío.
Generar un token de ID mediante la suplantación de una cuenta de servicio
El robo de identidad de cuentas de servicio permite que una principal genere credenciales de corta duración para una cuenta de servicio confiable. Luego, la principal puede usar estas credenciales para autenticarse como la cuenta de servicio.
Antes de que una principal pueda actuar en nombre de una cuenta de servicio, debe tener un rol de IAM en esa cuenta de servicio que habilite el robo de identidad. Si la principal es en sí misma otra cuenta de servicio, podría parecer más fácil proporcionar los permisos necesarios directamente a esa cuenta de servicio y habilitarla para que se haga pasar por ella misma. Esta configuración, conocida como autosuplantación, crea una vulnerabilidad de seguridad, porque permite que la cuenta de servicio cree un token de acceso que pueda actualizarse a perpetuidad.
El robo de identidad de la cuenta de servicio siempre debe incluir dos principales: una principal que represente al emisor y la cuenta de servicio que se está suplantando, llamada “cuenta de servicio con privilegios”.
Para generar un token de ID en nombre de una cuenta de servicio, usa el siguiente proceso general.
Para obtener instrucciones paso a paso, consulta Crea un token de ID.
Identifica o crea una cuenta de servicio para que sea la cuenta de servicio con privilegios.
- Consulta la documentación del producto a fin de identificar los roles necesarias para invocar el servicio de destino. Otorga estos roles a la cuenta de servicio en el servicio de destino:
Identifica el principal que realizará el robo de identidad y configura las Credenciales predeterminadas de la aplicación (ADC) para usar las credenciales de este principal.
Para los entornos de desarrollo, el principal suele ser la cuenta de usuario que proporcionaste a ADC mediante la CLI de gcloud. Sin embargo, si ejecutas en un recurso con una cuenta de servicio adjunta, la cuenta de servicio adjunta es el principal.
Otorga a el rol principal de creador de tokens de identidad de OpenID Connect de la cuenta de servicio (
roles/iam.serviceAccountOpenIdTokenCreator
).Usa la API de credenciales de IAM a fin de generar el token de ID para la cuenta de servicio autorizada.
Reemplaza lo siguiente:
- AUDIENCE: Es el URI del servicio de destino, por ejemplo,
http://www.example.com
. - SERVICE_ACCOUNT_EMAIL: Es la dirección de correo electrónico de la cuenta de servicio con privilegios.
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ -d '{"audience": "AUDIENCE", "includeEmail": "true"}' \ https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/SERVICE_ACCOUNT_EMAIL:generateIdToken
- AUDIENCE: Es el URI del servicio de destino, por ejemplo,
¿Qué sigue?
- Comprende los tokens de ID.
- Usa comandos de shell para consultar el servidor de metadatos de Compute Engine.
- Más información sobre los métodos de autenticación.