Utiliser un IDP pour se connecter à Salesforce (Part 2 — User Provisioning)

Halim BOUNFOUF
Altius services
Published in
6 min readNov 22, 2022

Avant de commencer, assurez-vous d’avoir lu la première partie de cette article pour mieux comprendre la suite.

Si vous vous rappelez bien, dans le premier article, nous avons défini un IdP comme étant un service qui permet d’authentifier et de gérer les utilisateurs des différents SP de l’entreprise.

Exemple

Vous êtes administrateur système et votre entreprise utilise trois solutions de gestion : Salesforce, SAP et Gmail. Pour chaque nouvel utilisateur, vous devez créer trois comptes, un sur chaque système. Et pour chaque départ d’un employé, vous devez désactiver les différents comptes.

avec l’utilisation d’un IdP, vous pouvez centraliser cette gestion. C’est à dire que vous créez le compte sur l’IdP et il sera créé automatiquement sur chaque système. De même lorsque vous désactivez le compte. Celui-ci sera automatiquement désactivé sur tous les systèmes.

Demo Time !

Build

Les prérequis :

Assurez-vous d’avoir suivi et réalisé les étapes du premier article, avant de commencer.

Commençons sans plus tarder !

Step 1 : Créer des champs de mapping sur miniOrange

Le scénario que nous allons réaliser tout au long de cet article est le suivant :

Un utilisateur essaye de se connecter à Salesforce en utilisant miniOrange. Si ce dernier existe au niveau de Salesforce, ses informations seront mises à jour. Et s’il n’existe pas, il sera automatiquement créé et connecté.

Pour cela il faudra que miniOrange envoie les informations de base qui permettent de créer un utilisateur sur Salesforce. Commençant donc par créer ces champs sur miniOrange.

  1. Dans votre accueil miniOrange, Survolez Users et cliquez sur User Profile Fields
  2. Saisissez les informations suivantes :
  • Field Name : Salesforce Profile
  • Field Type : Textbox
  • Required ? : Oui
  • Show on Sign Up : Oui

3. Cliquez sur Add an Attribute pour ajouter les deux champs suivants : Salesforce Username de type Textbox et Salesforce Is Active User de type checkbox avec une seule valeur True.

4. Cliquez sur Save.

Step 2 : Re-configuration côté Idp (miniOrange)

Nous allons à présent revoir la configuration de notre application Salesforce afin de lui permettre d’envoyer les informations nécessaires à la création d’un utilisateur.

  1. Dans Apps, Cliquez sur Select à côté de l’application Salesforce. Puis cliquez sur Edit
  2. En bas du formulaire, cliquez sur + Attributes. Et ajoutez les informations suivantes :
  • User.ProfileId -> Custom Profile Attribute -> Custom Attribute 1
  • User.Username -> Custom Profile Attribute -> Custom Attribute 2
  • User.IsActive -> Custom Profile Attribute -> Custom Attribute 3
  • User.Email -> E-mail Address
  • User.FirstName -> First Name
  • User.LastName -> Last Name

Vous remarquerez qu’à gauche vous mettez les nom API de l’objet User dans Salesforce. Et à droite vous mettez la correspondance dans miniOrange.

3. Cliquez sur Save.

Step 3 : Reconfiguration côté SP (Salesforce)

Basculez maintenant vers Salesforce afin de mettre à jour votre configuration SSO. Nous allons dire à Salesforce qu’il faut maintenant utiliser les informations reçus de la part de miniOrange, non seulement pour l’authentification mais aussi pour la création et la mise à jour des utilisateurs.

  1. Dans Setup, saisissez Single Sign On et cliquez sur Single Sign-On Settings
  2. Cliquez sur Edit à côté de votre application miniOrange
  3. Cochez User Provisioning Enabled.

Laissez l’option User Provisioning Type sur Standard. Notez qu’il est possible d’utiliser une classe Apex pour manipuler les informations reçues de la part de l’IdP

4. Cliquez sur Save.

Step 4 : Enjoy !

Pour tester tout cela, nous allons créer un utilisateur sur miniOrange. Esuite, nous allons l’utiliser pour nous connecter sur Salesforce. Vous remarquerez qu’un utilisateur avec les mêmes informations sera automatiquement créé sur Salesforce. Let’s do it !

  1. Re-basculez dans miniOrange. Suvrolez Users et cliquez sur User List.
  2. Cliquez sur Add User et saisissez les informations suivantes :
  • Email : Choisissez une adresse mail
  • Saisissez votre nom et prénom dans les champs First Name et Last Name
  • Salesforce Profile : Standard User.

Mettez le nom exact du profil Salesforce que vous souhaitez attribuer à votre utilisateur. Gardez en tête la limite du nombre de licences disponibles sur votre environnement Salesforce. Si vous dépassez cette limite, votre utilisateur ne pourra pas être créé.

  • Nom d’utilisateur : Choisir un nom d’utilisateur unique pour le compte Salesforce.
  • Salesforce Is Active : Oui
  • Password : Saisissez un mot de passe.

3. Cliquez sur Create User

4. Ouvrez maintenant Salesforce dans un nouvel onglet ou dans un navigateur privé.

Assurez-vous d’utiliser votre nom de domaine personnalisé et non pas l’URL de connexion standard : https:login.salesforce.com

5. Cliquez sur Login using : miniOrange.

6. Saisissez le nom d’utilisateur et le mot de passe de votre nouvel utilisateur.

Voila ! Un nouvel utilisateur est automatiquement créé et directement connecté sur Salesforce.

Essayez maintenant de modifier une information de votre utilisateur sur miniOrange (Le prénom par exemple) et connectez vous de nouveau à Salesforce. Vous allez tout de suite constater la mise à jour.

Et si maintenant on décochait la case Salesforce Is Active User pour notre utilisateur miniOrange ? Vous l’avez surement deviné, l’utilisateur sera automatiquement désactivé sur Salesforce. Lorsqu’il va essayer de se connecter la prochaine fois en utilisant miniOrange, ceci peut s’avérer très utile pour un administrateur système. Au lieu de désactiver un par un tous les compte d’un utilisateur. Il suffit de le faire dans un seul endroit qui est votre IdP.

Let’s go deeper with Apex

Si vous avez besoin de plus de contrôle au moment de la création ou de la mise à jour de votre utilisateur au niveau de Salesforce, vous pouvez faire appel à un custom handler en utilisant Apex. Salesforce vous générera automatiquement une classe avec un contenu déjà prêt. Vous pourrez soit, tout supprimer et faire toute votre personnalisation from scratch, soit modifier la classe pour lui apporter les ajustements que vous souhaitez.

Dans cette partie, nous allons concaténer une chaine de caractères statiques au prénom de l’utilisateur. Exemple : Si on récupère la valeur Halim comme prénom sur miniOrange on va insérer Halim from miniOrange comme prénom au niveau de Salesforce. Let’go !

Step 1 : Revoir votre configuration Salesforce

  1. Dans Setup, Saisissez Single Sign On et cliquez sur Single Sign-On Settings
  2. Cliquez sur Edit à côté de votre configuration miniOrange
  3. Assurez-vous que la case User Provisioning Enabled est cochée
  4. Dans User Provisioning Type, cochez Custom SAML JIT with Apex handler
  5. Cliquez sur Automatically create a SAML JIT handler template.

Notez le nom de la classe qui a été générée par Salesforce. Nous allons l’ouvrir et l’éditer dans la prochaine étape.

6. Dans Execute Handler As, sélectionnez un utilisateur au nom duquel le code apex sera exécuté.

7. Cliquez sur Save.

Step 2 : Mettre à jour votre classe Apex

  1. Ouvrez la classe qui a été générée par Salesforce en utilisant VSCode ou Developer Console.
  2. La première chose à faire est de renommer la classe pour lui donner un nom significatif. Dans mon cas, je la nomme MiniOrangeHandler

Notez que cette classe implémente l’interface Auth.SamlJitHandler. Cette interface contient les deux méthodes suivantes : createUser et UpdateUser. Elle permettent de personnaliser la création et la modification d’un utilisateur. Vous trouverez plus de détails sur cette classe ici : https://developer.salesforce.com/docs/atlas.en-us.234.0.apexref.meta/apexref/apex_interface_Auth_SamlJitHandler.htm

3. Allez maintenant à la ligne 23 est mettez la à jour comme ceci :

u.FirstName = attributes.get(‘User.FirstName’) + ‘ from miniOrange’;

Ceci nous permet de concaténer la chaîne de caractères ‘from miniOrange’ au prénom de tous les utilisateurs qui proviennent de miniOrange. Bien évidemment, ceci est juste un cas théorique. Vous pouvez faire d’autres personnalisations en fonction de votre besoin.

4. Si vous vous rappelez lorsque nous avons ajouté les champs à envoyer à Salesforce dans la réponse de miniOrange. Nous avons créé un champ nommé Salesforce Profile. On mettait le nom du profil Salesforce de l’utilisateur.

Afin de garder cette même configuration. Nous devons faire une petite modification au niveau de notre classe. Allez à la ligne 143 et faites la modification suivante :

Profile p = [SELECT Id FROM Profile WHERE Name=:profileId];

Par défaut, la classe générée par Salesforce travaille avec l’Id du profil. Et puisque miniOrange nous envoie le nom de ce dernier. Notre requête SOQL doit chercher par nom et non pas par Id.

5. Enregistrez votre classe.

Step 3 : Enjoy !

Essayez maintenant de créer un nouvel utilisateur sur miniOrange et connectez-vous avec en utilisant Salesforce. Vous remarquerez qu’un nouvel utilisateur est créé et son prénom se termine avec ‘from miniOrange’

Assurez-vous toujours que vous avez suffisamment de licences disponibles sur votre environnement Salesforce. Sinon vous aurez un message d’erreur parce que l’utilisateur ne pourra pas être créé. Si vous utilisez un environnement de dev, pensez à désactiver des utilisateurs pour pouvoir en créer d’autres.

Conclusion

Nous avons vu dans cet article comment utiliser un IdP, non seulement pour l’authentification, mais aussi la gestion des utilisateurs au niveau d’un SP. Nous avons aussi vu comment utiliser Apex pour avoir plus de contrôle dans le traitement des données reçu par l’IdP.

What’s next ?

La vie est belle quand tout marche dès le premier coup. Mais on sait tous que ça n’arrive jamais.

Terminons donc avec une interrogation …

Comment faire pour voir les données échangées entre le SP et l’IdP ? Et, en cas de problème, comment faire pour débuguer ?

C’est ce que nous allons voir dans notre prochain article. Restez branchés !

--

--