¡Hola en este increíble 2022, eso SERA mejor!
aquí está el caso que tenemos y el problema que enfrentamos:
Y así en el proyecto A:
const firebase = require("firebase-admin"); const botInformURL = "URLTOHIT"; const token = await firebase.auth().createCustomToken("XXX-notification-system"); const output = await axios.post(botInformURL, { headers: { "Content-Type": "application/json", Authorization: "Bearer " + token, }, method: "post", body: JSON.stringify({ additionalMessage }),Desde la plataforma de la nube de Google (para CloudFunctions - en la configuración del proyecto B) he agregado el correo electrónico de la cuenta de servicio ((...) proyectoA (...) iam.gserviceaccount.com) como Invocador de funciones en la nube (también probé el administrador - sin éxito)
Y ahora, estoy siendo bloqueado en GCP con un 403.
¿Qué me estoy perdiendo aquí?
Cuando una persona que llama sin autenticar envía una solicitud a Cloud Function, verá una respuesta de código de estado 401/403 . En este escenario, la salida es asegurarse de que 'allUsers' tenga el rol 'roles/cloudfunctions.invoker' en el IAM de Cloud Function. Puede consultar esta documentación para obtener más información al respecto.
Pero sí, tiene razón, si usa 'allUsers', expondría el punto final públicamente y cualquiera podría acceder a él .
Si quieres evitar esto, tienes que seguir los siguientes pasos:
From the receiving function: 1. You need to configure the receiving function to accept requests from the calling function. 2. Use the gcloud functions add-iam-policy-binding command. From the calling function: 1. Create a Google-signed OAuth ID token with the audience (aud) set to the URL of the receiving function. 2. Include the ID token in an Authorization: Bearer ID_TOKEN header in the request to the function.También puede consultar el enlace de Stackoverflow para obtener más información.