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.

Firebase Microsoft SignInWithCredential Iniciar sesión con credenciales de Microsoft en Firebase

Estoy configurando la autenticación de Microsoft en Firebase (web js sdk), pero me estoy encontrando con un error en firebase.auth.signInWithCredential. Puedo obtener correctamente un token de identificación de Microsoft, pero el paso de autenticación de Firebase falla. He probado con Firebase v8 y v9, y varias formas de formar mi objeto de credenciales. De hecho, obtengo el mismo error incluso al pasar un token de acceso. Parece que hay algo mal en la biblioteca de Firebase.
¿Alguien ha experimentado este problema antes y lo ha resuelto?

Código:

const { id_token } = authResponse.params; // He verificado que id_token es correcto
const credential = new firebase.auth.OAuthProvider("microsoft.com").credential({
  idToken: id_token,
  rawNonce: "12345",
});
await firebase.auth().signInWithCredential(credential);

La credencial parece generarse correctamente:

Object {
  "accessToken": undefined,
  "idToken": "eyJ0eXAiOiJKV...",
  "nonce": "12345",
  "pendingToken": null,
  "providerId": "microsoft.com",
  "secret": undefined,
  "signInMethod": "microsoft.com",
}

Pero el paso de signInWithCredential obtiene el siguiente error:

Uncaught (in promise) 
code: "auth/internal-error"
message: "Respuesta/Credencial de IdP no válida: http://localhost?id_token=eyJ0eXAiOiJKV..."
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que puede haber un problema con la biblioteca de Firebase en el manejo del objeto de credencial generado por el método firebase.auth.OAuthProvider. Ya has verificado que el id_token es correcto y el objeto de credencial se ve bien.

    Una posible solución es utilizar la API de Microsoft Graph para autenticar al usuario directamente con Firebase. Puedes autenticar al usuario utilizando la API de Microsoft Graph y obtener un token. Luego, utiliza ese token para iniciar sesión en Firebase utilizando el método signInWithCustomToken.

    Aquí tienes un ejemplo de código:

    const { access_token } = authResponse.params; // Obtén el token de acceso de Microsoft
    const endpoint = `https://www.googleapis.com/identitytoolkit/v3/relyingparty/signupNewUser?key=${FIREBASE_API_KEY}`;
    const response = await fetch(endpoint, {
      method: 'POST',
      body: JSON.stringify({
        token: access_token,
        returnSecureToken: true,
      }),
    });
    
    const responseJson = await response.json();
    const { idToken } = responseJson;
    
    // Inicia sesión en Firebase utilizando el token personalizado
    await firebase.auth().signInWithCustomToken(idToken);
    

    Este método utiliza el método signInWithCustomToken para iniciar sesión en Firebase con el token personalizado obtenido de la API de Microsoft Graph. Esto debería evitar cualquier problema con la biblioteca de Firebase en el manejo del objeto de credencial del método firebase.auth.OAuthProvider.

    ¡Espero que esto te ayude a resolver tu problema! Avísanos si tienes alguna otra pregunta.

Comments are closed.