El token de ID de Firebase tiene una firma no válida
Hola a todos, de alguna manera soy nuevo en NodeJS y solo he usado Google Firebase algunas veces. Ahora, estoy tratando de verificar un idToken generado usando el método getIdToken()
cada vez que un usuario se registra o inicia sesión. La generación de tokens funciona bien, pero si trato de usar este token para autorizar a un usuario admin.auth().verifyIdToken(idToken)
en otra ruta, aparece este error El token de ID de Firebase tiene una firma no válida en Postman. Traté de verificar el token en jwt.io también, dio error Firma no válida .
Intenté cambiar a diferentes algoritmos, algunos eventualmente hicieron que el token fuera válido en jwt, pero generalmente hay un cuadro VERIFICAR FIRMA en la parte inferior derecha que realmente no sé qué llenar allí. Bueno, he intentado copiar diferentes tokens válidos recién generados por jwt después de cambiar el algoritmo, pero sigo obteniendo que el token de ID de Firebase tiene una firma no válida de Postman.
¿Alguien sabe cuál puede ser el problema? Por favor ayuda.
Por alguna razón, la función verificarIdToken arroja "El token de ID de Firebase tiene una firma no válida" cada vez para tokens válidos cuando se usa en Firebase Emulator localmente. Solucioné este problema al comenzar a usar la autenticación alojada en firebase en lugar de la autenticación del emulador (eliminar la propiedad de autenticación de firebase.json). Además, informé el error a Firebase.
El problema proviene de Firebase Emulator Auth. La autenticación alojada en Firebase no puede verificar el token JWT generado por la autenticación del emulador de Firebase.
TLDR;
Preferir log
de dart:developer sobre yprint
.debugPrint
No estaba usando el emulador...
Soy nuevo en Firebase y he experimentado esto, e incluso voté a favor de GeniusHawlah como las respuestas de Taras Mazurkevych ... Pero no pude encontrar nada en la configuración de Firebase relacionado con el simulador que hice.
Entonces sucedió que estaba probando mi base de fuego usando un token JWT truncado, impreso desde Dart's (cualdebugPrint
limites trunca la salida). ¡Tuve éxito al usar log
de dart:developer
!
Me iluminó https://github.com/flutter/flutter/issues/22665#issuecomment-456858672 .
Encontré un problema similar, descubrí que BE apuntaba al emulador local, pero FE apuntaba al Firebase Auth remoto (debido a un error en el código firebase.auth().useEmulator(...)
no era llamado)
Para verificar el token en jwt.io, debe obtener una de las claves públicas de https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com (el "JWK URI" , sin embargo, es https://www.googleapis.com/service_accounts/v1/jwk/securetoken@system.gserviceaccount.com )
Use el kid
de jwt.io para saber qué clave pública usar desde el enlace de arriba
Pegue la clave correcta (asegúrese de borrar los caracteres \n
si están allí) y debería verificarse correctamente:
Fuente: https://firebase.google.com/docs/auth/admin/verify-id-tokens