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.

La solicitud de máquina virtual de Google Cloud está incompleta, falta la credencial de autenticación.

Recientemente desplegué una aplicación Node.js/express en una VM de Google Cloud Compute. ¿Cómo puedo enviar solicitudes GET a la aplicación? Seguí las instrucciones en este artículo para obtener mi URL. Sin embargo, cuando la ejecuto desde la línea de comandos con curl, obtengo un error de autenticación de credenciales 401.

Solicitud:

https://compute.googleapis.com/compute/v1/projects/*PROJECT_ID*/zones/*ZONE*/machineTypes/e2-standard-2

Ya he iniciado sesión en el SDK de gcloud. ¿Hay algún otro tipo de autenticación que necesite para conectarme con mi VM?

Mensaje de error completo:

{
  "error": {
    "code": 401,
    "message": "Solicitud sin las credenciales de autenticación requeridas. Se esperaba un token de acceso de OAuth 2, una cookie de inicio de sesión u otra credencial de autenticación válida. Consulta https://developers.google.com/identity/sign-in/web/devconsole-project.",
    "errors": [
      {
        "message": "Inicio de sesión requerido.",
        "domain": "global",
        "reason": "required",
        "location": "Authorization",
        "locationType": "header"
      }
    ],
    "status": "WITHOUT_AUTHENTICATION",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.ErrorInfo",
        "reason": "CREDENTIALS_MISSING",
        "domain": "googleapis.com",
        "metadata": {
          "method": "compute.v1.MachineTypesService.Get",
          "service": "compute.googleapis.com"
        }
      }
    ]
  }
}
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para autenticar y enviar solicitudes GET a su aplicación Node.js/express implementada en una VM de Google Cloud Compute, es necesario utilizar un token de acceso de OAuth 2 u otra credencial de autenticación válida.

    Una opción para obtener el token de acceso es utilizar la herramienta de línea de comandos gcloud con el siguiente comando:

    gcloud auth application-default print-access-token
    

    Este comando imprimirá el token de acceso en la consola, el cual puede utilizarse como parte de su solicitud GET. Puede agregarlo como encabezado de autorización con el valor Bearer ACCESS_TOKEN.

    Por ejemplo:

    curl -H "Authorization: Bearer ACCESS_TOKEN" https://compute.googleapis.com/compute/v1/projects/*PROJECT_ID*/zones/*ZONE*/machineTypes/e2-standard-2
    

    Alternativamente, puede utilizar las bibliotecas del cliente de Google Cloud SDK para Node.js para realizar solicitudes autenticadas.

    Aquí hay un ejemplo que utiliza los paquetes google-auth-library y request:

    const { auth } = require('google-auth-library');
    const request = require('request');
    
    // Reemplace con el ID de su proyecto y la zona
    const projectId = 'PROJECT_ID';
    const zone = 'ZONE';
    
    const url = `https://compute.googleapis.com/compute/v1/projects/${projectId}/zones/${zone}/machineTypes/e2-standard-2`;
    
    auth.getApplicationDefault((err, authClient) => {
      if (err) {
        console.error(err);
        return;
      }
    
      authClient.authorize((err, token) => {
        if (err) {
          console.error(err);
          return;
        }
    
        const options = {
          url: url,
          headers: {
            'Authorization': `Bearer ${token.access_token}`
          }
        };
    
        request(options, (err, response, body) => {
          console.log(body);
        });
      });
    });
    

    Este código obtendrá un token de acceso de OAuth2 utilizando la biblioteca google-auth-library y luego lo adjuntará como un token de tipo bearer en el encabezado de autorización de la solicitud enviada con request. La respuesta se mostrará en la consola.

    Asegúrese de reemplazar PROJECT_ID y ZONE con los ID reales de su proyecto y zona.

Comments are closed.