Necesito ayuda para comprender si estoy manejando la autenticación/autorización correctamente con Firebase Auth, JS y Python.
Una vez que el usuario ha iniciado sesión, capturo el idToken y creo una cookie en el navegador:
firebase.auth().signInWithEmailAndPassword(email, pass) .then(({user}) => { return user.getIdToken().then((idToken) => { if (idToken) { document.cookie = "token=" + idToken; window.location.assign('/profile'); } else { document.cookie = "token=" } }) }) .catch((error) => { //handle error here });La ruta/perfil debe estar protegida, así que creé un decorador, recuperé la cookie y la verifiqué:
id_token = request.cookies.get("token") if not id_token: return redirect(url_for('login')) try: decoded_token = auth.verify_id_token(id_token) uid = decoded_token['uid'] except Exception as e: print("Exception: {}".format(e)) return redirect(url_for('login'))Esto está funcionando hasta ahora, pero quiero ver si esta es la situación ideal desde una perspectiva de seguridad. Además, ¿qué pasa con onAuthStateChanged? ¿Cómo debo manejarlo en el caso anterior?
Los SDK de Firebase envían el token de ID con cada solicitud en el encabezado de Authorization , por lo que enviarlo en una cookie no será más ni menos peligroso que eso.
Sin embargo, en lugar de determinar el token en signInWithEmailAndPassword , monitorearía la generación de tokens de ID escuchando los eventos onIdTokenChanged y usando ese momento para actualizar su cookie.