Inicio de sesión de usuarios con Microsoft

En este documento se explica cómo usar Identity Platform para iniciar sesión con Microsoft. Se admiten tanto cuentas personales de Microsoft como cuentas de Azure Active Directory (Azure AD).

Antes de empezar

En este tutorial se da por hecho que ya has habilitado Identity Platform y que tienes una aplicación web básica escrita en HTML y JavaScript. Consulta la guía de inicio rápido para saber cómo hacerlo.

Configurar Microsoft como proveedor

Para configurar Microsoft como proveedor de identidades, sigue estos pasos:

  1. Ve a la página Proveedores de identidades de la consola de Google Cloud .

    Ir a la página Proveedores de identidades

  2. Haz clic en Add A Provider (Añadir proveedor).

  3. Selecciona Microsoft en la lista.

  4. Introduce tu ID de aplicación y tu secreto de aplicación de Microsoft. Si aún no tienes un ID y un secreto, sigue los pasos que se indican en Inicio rápido: registrar una aplicación con el endpoint v2.0 de Azure AD para obtenerlos.

    Este endpoint admite tanto cuentas personales de Microsoft como cuentas de Azure AD. Para obtener más información sobre Azure AD, consulta la descripción general de la plataforma de identidad de Microsoft (versión 2.0).

  5. Configura el URI que aparece en Configurar Microsoft como el URI de redirección de OAuth válido para tu aplicación de Microsoft. Si has configurado un dominio personalizado en Identity Platform, actualiza el URI de redirección en la configuración de tu aplicación de Microsoft para que use el dominio personalizado en lugar del dominio predeterminado. Por ejemplo, cambia https://myproject.firebaseapp.com/__/auth/handler por https://auth.myownpersonaldomain.com/__/auth/handler.

  6. Para registrar los dominios de tu aplicación, haz clic en Añadir dominio en Dominios autorizados. Para actividades de desarrollo, localhost ya está habilitado de forma predeterminada.

  7. En Configura tu aplicación, haz clic en Detalles de la configuración. Copia el fragmento en el código de tu aplicación para inicializar el SDK de cliente de Identity Platform.

  8. Haz clic en Guardar.

Inicio de sesión de usuarios con el SDK de cliente

  1. Crea una instancia del objeto OAuthProvider y pasa microsoft.com como ID de proveedor:

    JavaScript

    var provider = new firebase.auth.OAuthProvider('microsoft.com');

  2. Opcional: Añade permisos de OAuth. Los permisos especifican los datos que solicitas a Microsoft. Es posible que los datos más sensibles requieran ámbitos específicos. Consulta la documentación de Microsoft para determinar qué ámbitos necesita tu aplicación.

    JavaScript

    provider.addScope('mail.read');
    provider.addScope('calendars.read');
    
  3. Opcional: especifica parámetros de OAuth personalizados adicionales. Son específicas de Microsoft y se suelen usar para personalizar la experiencia de autenticación.

    JavaScript

    provider.setCustomParameters({
      // Force re-consent.
      prompt: 'consent',
      // Target specific email with login hint.
      login_hint: 'user@firstadd.onmicrosoft.com'
    });
    

    Puedes usar el parámetro mkt para personalizar el idioma del flujo de autenticación. Por ejemplo:

    provider.setCustomParameters({
      mkt: 'fr'
    });
    

    Puede usar la propiedad tenant para limitar el acceso a usuarios que no pertenezcan a un dominio de Azure AD concreto. Especifica el nombre de dominio descriptivo del inquilino o su identificador GUID. Los usuarios que no pertenezcan a este dominio no podrán iniciar sesión. Por ejemplo:

    provider.setCustomParameters({
      // Optional "tenant" parameter in case you are using an Azure AD tenant.
      // eg. '8eaef023-2b34-4da1-9baa-8bc8c9d6a490' or 'contoso.onmicrosoft.com'
      // or "common" for tenant-independent tokens.
      // The default value is "common".
      tenant: 'TENANT_ID'
    });
    

    Consulta la documentación de OAuth de Microsoft para ver la lista completa de parámetros que admite Microsoft. Ten en cuenta que no puedes transferir parámetros reservados por OAuth o Identity Platform.

  4. Usa el objeto OAuthProvider para iniciar la sesión del usuario. Puedes abrir una ventana emergente o redirigir la página actual. La redirección es más sencilla para los usuarios de dispositivos móviles.

    Para mostrar una ventana emergente, llama a signInWithPopup():

    JavaScript

    firebase.auth().signInWithPopup(provider)
      .then((result) => {
        // IdP data available in result.additionalUserInfo.profile.
        // ...
    
        /** @type {firebase.auth.OAuthCredential} */
        var credential = result.credential;
    
        // OAuth access and id tokens can also be retrieved:
        var accessToken = credential.accessToken;
        var idToken = credential.idToken;
      })
      .catch((error) => {
        // Handle error.
      });

    Para redirigir la página, primero llama a signInWithRedirect():

    Sigue las prácticas recomendadas cuando uses signInWithRedirect, linkWithRedirect o reauthenticateWithRedirect.

    JavaScript

    firebase.auth().signInWithRedirect(provider);

    A continuación, recupera el token de Microsoft llamando a getRedirectResult() cuando se cargue tu página:

    JavaScript

    firebase.auth().getRedirectResult()
      .then((result) => {
        // IdP data available in result.additionalUserInfo.profile.
        // ...
    
        /** @type {firebase.auth.OAuthCredential} */
        var credential = result.credential;
    
        // OAuth access and id tokens can also be retrieved:
        var accessToken = credential.accessToken;
        var idToken = credential.idToken;
      })
      .catch((error) => {
        // Handle error.
      });

Una vez que tengas un token de acceso, podrás usarlo para llamar a la API de Microsoft Graph. Por ejemplo:

REST

curl -i -H "Authorization: Bearer [ACCESS_TOKEN]" https://graph.microsoft.com/v1.0/me

A diferencia de otros proveedores compatibles con Identity Platform, Microsoft no proporciona una URL de foto para los usuarios. En su lugar, tendrás que usar la API Graph para solicitar los datos binarios de la foto.

Además del token de acceso, también puedes obtener el token de ID de Microsoft de un usuario. La reclamación oid de este token contiene un ID único del usuario. Puedes compararlo con el ID que se encuentra en user.providerData[0].uid. Si tus usuarios inician sesión con un tenant de Azure AD, estos campos coincidirán exactamente. Si no es así, el campo se rellenará con ceros (por ejemplo, el ID federado 4b2eabcdefghijkl se mostrará como 00000000-0000-0000-4b2e-abcdefghijkl).

No uses la reclamación sub para comparar IDs de usuario. La reclamación sub es específica de la aplicación y no coincidirá con el ID que usa Microsoft.

Inicio de sesión de usuarios de forma manual

Otros proveedores de Identity Platform, como Google, Facebook y Twitter, te permiten iniciar la sesión de los usuarios manualmente llamando a signInWithCredential().

Esta función no está disponible para Microsoft. Identity Platform no puede verificar la audiencia de los tokens de acceso de OAuth de Microsoft, lo cual es un requisito de seguridad fundamental.

Si no puedes usar el SDK de cliente de Identity Platform para iniciar la sesión de los usuarios, tendrás que usar una biblioteca OAuth de terceros para autenticarte con Microsoft. A continuación, puedes usar la autenticación personalizada para intercambiar la credencial de Microsoft por un token personalizado.

Siguientes pasos