Procéder à la connexion des utilisateurs avec Microsoft

Ce document explique comment utiliser Identity Platform pour connecter des utilisateurs avec Microsoft. Les comptes Microsoft personnels et les comptes Azure Active Directory (Azure AD) sont tous deux acceptés.

Avant de commencer

Ce tutoriel suppose que vous avez déjà activé Identity Platform et que vous disposez d'une application Web de base écrite en HTML et JavaScript. Pour savoir comment, consultez le guide de démarrage rapide.

Configurer Microsoft en tant que fournisseur

Pour configurer Microsoft en tant que fournisseur d'identité :

  1. Accédez à la page Fournisseurs d'identité dans la console Google Cloud.

    Accéder à la page "Fournisseurs d'identité"

  2. Cliquez sur Ajouter un fournisseur.

  3. Dans la liste, sélectionnez Microsoft.

  4. Saisissez votre ID d'application et votre code secret de l'application Microsoft. Si vous ne possédez pas encore d'ID et de code secret, suivez les étapes décrites dans la section Démarrage rapide : enregistrer une application avec le point de terminaison Azure AD v2.0 pour vous en procurer.

    Ce point de terminaison accepte les comptes personnels Microsoft et les comptes Azure AD. Pour en savoir plus sur Azure AD, consultez la présentation de la plate-forme Microsoft Identity (v2.0).

  5. Configurez l'URI indiqué sous Configurer Microsoft comme URI de redirection OAuth valide pour votre application Microsoft. Si vous avez configuré un domaine personnalisé dans Identity Platform, mettez à jour l'URI de redirection dans la configuration de votre application Microsoft pour qu'il utilise le domaine personnalisé au lieu du domaine par défaut. Par exemple, remplacez https://myproject.firebaseapp.com/__/auth/handler par https://auth.myownpersonaldomain.com/__/auth/handler.

  6. Enregistrez les domaines de votre application en cliquant sur Ajouter un domaine sous Domaines autorisés. À des fins de développement, localhost est déjà activé par défaut.

  7. Sous Configurer votre application, cliquez sur Informations sur la configuration. Copiez l'extrait dans le code de votre application pour initialiser le SDK client Identity Platform.

  8. Cliquez sur Enregistrer.

Connecter des utilisateurs avec le SDK client

  1. Créez une instance de l'objet OAuthProvider, en transmettant microsoft.com comme ID de fournisseur :

    JavaScript

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

  2. Facultatif : Ajoutez des champs d'application OAuth. Les champs d'application spécifient les données que vous demandez à Microsoft. Des données plus sensibles peuvent nécessiter des champs d'application spécifiques. Consultez la documentation de Microsoft pour déterminer les champs d'application dont votre application a besoin.

    JavaScript

    provider.addScope('mail.read');
    provider.addScope('calendars.read');
    
  3. Facultatif : spécifiez des paramètres OAuth personnalisés supplémentaires. Ceux-ci sont spécifiques à Microsoft et sont généralement utilisées pour personnaliser l'expérience d'authentification.

    JavaScript

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

    Vous pouvez utiliser le paramètre mkt pour personnaliser la langue du flux d'authentification. Exemple :

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

    Vous pouvez utiliser la propriété tenant pour limiter l'accès aux utilisateurs en dehors d'un domaine Azure AD particulier. Indiquez le nom de domaine convivial du locataire ou son identifiant GUID. Les utilisateurs qui ne font pas partie de ce domaine ne pourront pas se connecter. Exemple :

    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'
    });
    

    Consultez la documentation Microsoft OAuth pour obtenir la liste complète des paramètres compatibles avec Microsoft. Notez que vous ne pouvez pas transmettre des paramètres réservés par OAuth ou Identity Platform.

  4. Utilisez l'objet OAuthProvider pour connecter l'utilisateur. Vous pouvez soit ouvrir une fenêtre pop-up, soit rediriger la page actuelle. La redirection est plus facile pour les utilisateurs d'appareils mobiles.

    Pour afficher une fenêtre pop-up, appelez 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.
      });

    Pour rediriger la page, commencez par appeler signInWithRedirect() :

    Suivez les bonnes pratiques lorsque vous utilisez signInWithRedirect, linkWithRedirect ou reauthenticateWithRedirect.

    JavaScript

    firebase.auth().signInWithRedirect(provider);

    Récupérez ensuite le jeton Microsoft en appelant getRedirectResult() lors du chargement de votre page :

    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.
      });

Une fois que vous disposez d'un jeton d'accès, vous pouvez l'utiliser pour appeler l'API Microsoft Graph. Exemple :

REST

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

Contrairement aux autres fournisseurs acceptés par Identity Platform, Microsoft ne fournit pas d'URL de photo aux utilisateurs. À la place, vous devez utiliser l'API Graph pour demander les données binaires de la photo.

En plus du jeton d'accès, vous pouvez également récupérer le jeton d'ID Microsoft d'un utilisateur. La revendication oid sur ce jeton contient un ID unique pour l'utilisateur. Vous pouvez le comparer à l'ID situé à l'adresse user.providerData[0].uid. Si vos utilisateurs se connectent avec un locataire Azure AD, ces champs correspondent exactement. Si ce n'est pas le cas, des zéros sont ajoutés à la valeur (par exemple, l'ID fédéré 4b2eabcdefghijkl s'affiche sous la forme 00000000-0000-0000-4b2e-abcdefghijkl).

N'utilisez pas la revendication sub pour comparer les ID utilisateur. La revendication sub est spécifique à l'application et ne correspond pas à l'ID utilisé par Microsoft.

Connecter manuellement des utilisateurs

Certains autres fournisseurs Identity Platform, tels que Google, Facebook et Twitter, vous permettent de connecter des utilisateurs manuellement en appelant signInWithCredential().

Cette fonctionnalité n'est pas compatible avec Microsoft. Identity Platform ne peut pas vérifier l'audience des jetons d'accès Microsoft OAuth, ce qui est une exigence de sécurité critique.

Si vous ne pouvez pas vous servir du SDK Identity Platform client pour connecter vos utilisateurs, vous devez utiliser une bibliothèque OAuth tierce pour vous authentifier avec Microsoft. Vous pouvez ensuite utiliser l'authentification personnalisée pour échanger les identifiants Microsoft contre un jeton personnalisé.

Étapes suivantes