es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Equivalente en Php para gcloud auth print-identity-token:

Mi objetivo es activar una función de Google Cloud a través de mi código PHP. Para eso, necesito un token de identidad como el Bearer, pero mi servidor no tiene gcloud instalado en él.
Tengo una cuenta de servicio que funciona y he creado un objeto a través de Google_Client (“google/apiclient”: “2.10.1”):

$this->setAuthConfig($serviceJson);
$scope = [Google_Service_Compute::CLOUD_PLATFORM, 'openid', 'email'];
$this->addScope($scope);
if ($this->isAccessTokenExpired()) {
  $this->fetchAccessTokenWithAssertion();
}
$this->getAccessToken()

Usando este cliente, solo puedo obtener el token de acceso (que no está autorizado para activar una función en la nube) pero el token de ID siempre está vacío.

¿Cómo puedo obtener el token de ID? ¿Hay alguna biblioteca de PHP que pueda ayudar o necesito hacer una solicitud POST separada para obtener el token de ID?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para obtener un token de identidad, primero necesitas obtener un token de acceso temporal. Esto se puede hacer utilizando las credenciales de la cuenta de servicio que ya has configurado. Una vez que tengas el token de acceso, puedes utilizarlo para hacer una solicitud al punto final de Google OAuth 2.0 y canjearlo por un token de identidad.

    Una forma de hacer esto en PHP es utilizar la Biblioteca del Cliente API de Google para PHP (google/apiclient). Puedes utilizar el método fetchAccessTokenWithAssertion() del objeto Google_Client para obtener un token de acceso temporal. Luego, puedes utilizar la clase Google_Auth_OAuth2 para canjear el token de acceso por un token de identidad.

    Aquí tienes un ejemplo de código:

    // Crear un objeto Google_Client y configurar las credenciales de la cuenta de servicio
    $client = new Google_Client();
    $client->setAuthConfig($serviceJson);
    $client->setScopes([Google_Service_Compute::CLOUD_PLATFORM, 'openid', 'email']);
    
    // Obtener un token de acceso temporal utilizando las credenciales de la cuenta de servicio
    if ($client->isAccessTokenExpired()) {
        $client->fetchAccessTokenWithAssertion();
    }
    
    // Canjear el token de acceso por un token de identidad
    $oauth2 = new Google_Auth_OAuth2($client);
    $idToken = $oauth2->getAccessToken()['id_token'];
    

    Ten en cuenta que el método getAccessToken() devuelve un array asociativo con el token de acceso y el tiempo de expiración. Aquí solo estamos interesados en el token de acceso, así que utilizamos la clave ['id_token'] para extraer el token de identidad.

    También ten en cuenta que necesitas tener el alcance ‘openid’ en el array $scope para obtener un token de identidad.

Comments are closed.