S'authentifier avec SAML dans les applications Web

Si vous êtes passé à Firebase Authentication with Identity Platform, vous pouvez authentifier vos utilisateurs avec Firebase via le fournisseur d'identité SAML de votre choix. Vous pouvez ainsi utiliser votre solution d'authentification unique basée sur SAML pour connecter les utilisateurs à votre application Firebase.

Firebase Authentication n'est compatible qu'avec le flux SAML initié par le fournisseur de services.

Avant de commencer

Pour connecter des utilisateurs à l'aide d'un fournisseur d'identité SAML, vous devez d'abord collecter des informations de la part du fournisseur:

  • ID d'entité du fournisseur : URI qui identifie le fournisseur d'identité.
  • The provider's SAML SSO URL (URL d'authentification unique SAML du fournisseur) : URL de la page de connexion du fournisseur d'identité .
  • Certificat de clé publique du fournisseur : certificat utilisé pour valider les jetons signés par le fournisseur d'identité.
  • L'ID d'entité de votre application: un URI qui identifie votre application, le "service d'un fournisseur de services.

Une fois que vous disposez des informations ci-dessus, activez SAML comme fournisseur de connexion pour votre projet Firebase :

  1. Ajoutez Firebase à votre projet JavaScript.

  2. Si vous n'êtes pas passé à Firebase Authentication with Identity Platform, faites-le. L'authentification SAML n'est disponibles dans les projets mis à niveau.

  3. Sur la page Fournisseurs de connexion, page de la console Firebase, cliquez sur Ajouter un fournisseur, puis sur SAML :

  4. Attribuez un nom à ce fournisseur. Notez l'ID du fournisseur généré : saml.example-provider, par exemple. Vous aurez besoin de cet ID lorsque vous ajouterez un code de connexion à votre application.

  5. Spécifiez l'ID d'entité, l'URL d'authentification unique et le certificat de clé publique de votre fournisseur d'identité. Spécifiez également l'ID d'entité de votre application (le fournisseur de services). Ces valeurs doivent correspondre exactement à celles que votre fournisseur vous a attribuées.

  6. Enregistrez les modifications.

  7. Si vous n'avez pas encore autorisé le domaine de votre application, ajoutez-le à la liste d'autorisation sur la page Authentication > Settings (Authentification > Paramètres) de la console Firebase.

Gérer le flux de connexion avec le SDK Firebase

Pour gérer la procédure de connexion avec le SDK Firebase JavaScript, procédez comme suit : étapes:

  1. Créez une instance d'un SAMLAuthProvider à l'aide de l'ID de fournisseur que vous avez obtenu dans la console Firebase.

    WebWeb
    import { SAMLAuthProvider } from "firebase/auth";
    
    const provider = new SAMLAuthProvider('saml.example-provider');
    
    var provider = new firebase.auth.SAMLAuthProvider('saml.example-provider');
    ``
    
  1. Authentifiez-vous auprès de Firebase à l'aide de l'objet de fournisseur SAML.

    Vous pouvez rediriger l'utilisateur vers la page de connexion du fournisseur ou ouvrir la page de connexion dans une fenêtre de navigateur pop-up.

    Flux de redirection

    Rediriger vers la page de connexion du fournisseur en appelant signInWithRedirect() :

    WebWeb
    import { getAuth, signInWithRedirect } from "firebase/auth";
    
    const auth = getAuth();
    signInWithRedirect(auth, provider);
    
    firebase.auth().signInWithRedirect(provider);
    

    Une fois que l'utilisateur a terminé la connexion et est revenu dans votre application, vous pouvez obtenir le résultat de la connexion en appelant getRedirectResult().

    import { getAuth, getRedirectResult, SAMLAuthProvider } from "firebase/auth";
    
    const auth = getAuth();
    getRedirectResult(auth)
      .then((result) => {
        // User is signed in.
    
        // Provider data available using getAdditionalUserInfo()
      })
      .catch((error) => {
        // Handle error.
      });
    
    firebase.auth().getRedirectResult()
      .then((result) => {
        // User is signed in.
    
        // Provider data available in result.additionalUserInfo.profile,
        // or from the user's ID token obtained from result.user.getIdToken()
        // as an object in the firebase.sign_in_attributes custom claim.
      })
      .catch((error) => {
        // Handle error.
      });
    

    Parcours des pop-ups

    import { getAuth, signInWithPopup, OAuthProvider } from "firebase/auth";
    
    const auth = getAuth();
    signInWithPopup(auth, provider)
      .then((result) => {
        // User is signed in.
    
        // Provider data available in result.additionalUserInfo.profile,
        // or from the user's ID token obtained from result.user.getIdToken()
        // as an object in the firebase.sign_in_attributes custom claim.
      })
      .catch((error) => {
        // Handle error.
      });
    
    firebase.auth().signInWithPopup(provider)
      .then((result) => {
        // User is signed in.
    
        // Provider data available in result.additionalUserInfo.profile,
        // or from the user's ID token obtained from result.user.getIdToken()
        // as an object in the firebase.sign_in_attributes custom claim.
      })
      .catch((error) => {
        // Handle error.
      });
    

    Le jeton d'ID et l'objet UserInfo ne contiennent l'adresse e-mail de l'utilisateur que si elle est fournie dans l'attribut NameID de l'assertion SAML du fournisseur d'identité :

    <Subject>
      <NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress">test@email.com</NameID>
    </Subject>
    
  2. Bien que les exemples ci-dessus se concentrent sur les flux de connexion, vous pouvez utiliser le même modèle pour associer un fournisseur SAML à un utilisateur existant à l'aide de linkWithRedirect() et linkWithPopup(), et réauthentifier un utilisateur avec reauthenticateWithRedirect() et reauthenticateWithPopup(), qui peuvent être utilisés pour récupérer de nouveaux identifiants pour les opérations sensibles qui nécessitent une connexion récente.