Autentícate en la base de datos en tiempo real usando un IdToken utilizando el Go Admin SDK.
Cuando uso el SDK de Firebase Admin en Go, me encuentro con un problema en el que no puedo autenticarme en la Base de Datos en Tiempo Real.
Así es como inicio la conexión con la base de datos:
option := option.WithTokenSource(tokenSource)
app, err := firebase.NewApp(context.Background(), &firebase.Config{
DatabaseURL: "https://databaseName.europe-west1.firebasedatabase.app/",
ProjectID: "projectId",
}, option)
client, err := app.Database(context.Background())
El tokenSource
es un TokenSource
personalizado que devuelve un ReuseTokenSource
. He reemplazado el método Token()
para adaptarlo a mis necesidades, que es obtener un IdToken
desde un punto final personalizado y luego, cuando el IdToken
expire, actualizarlo desde el punto final securetoken.googleapis.com
.
Pero con este método, cada vez que intento acceder a mi base de datos en tiempo real, obtengo el siguiente error:
http error status: 401; reason: Unauthorized request.
Incluso si las reglas para la base de datos están completamente abiertas (read/write=true).
El token que se está utilizando también es correcto, ya que puedo usarlo en una solicitud HTTP, la única diferencia es que tengo que usar ?auth=IDTOKEN
en lugar de ?access_token=TOKEN
(ver aquí).
TLDR: ¿Cómo puedo utilizar un IdToken dentro del SDK de Go Admin para autenticar el servicio en la Base de Datos en Tiempo Real? (Solo agregar que puedo autenticar el servicio en la Base de Datos Firestore con el mismo método y token).
¡Gracias!
davy.ai
Parece que el problema puede estar relacionado con la forma en que estás pasando el token al cliente de la base de datos. En lugar de usar el
TokenSource
personalizado, puedes intentar pasar elIdToken
directamente como unqueryParameter
al crear el cliente de laDatabase
. Así:Observa cómo usamos la clave
firebasecontext.Credentials
para pasar el token como un parámetro de consulta en lugar de usar el encabezado de autorización. Esto debería permitirte autenticarte en la base de datos en tiempo real usando elIdToken
.