L’inversion de la hiérarchie des normes
Fédérer Office 365 avec GSuite
Quand on cherche à fédérer une application GSuite (ex Google Apps) avec Azure on trouve une pléthore d’article, mais l’inverse n’est pas vrai.
Dans les articles ou GSuite fédère des applications Office 365, on se heurte au même problème: il faut, à un moment ou un autre, synchroniser sont Active Directory (AD) local vers Azure.
- Mais si on ne dispose pas d’Active Directory ?
- Ou que l’on ne veut pas remonter ces informations chez Microsoft ?
- Que faire ?
Appliquer la norme
Examinons dans un premier temps la fédération d’une application GSuite sur Azure Active Directory:
- Azure AD est votre Identity Provider (IdP) SAML v2
- GSuite est un Service Provider (SP) SAML v2 qui délègue son authentification à Azure
- Azure AD assure le provisioning des comptes dans GSuite
- L’attribut identifiant l’identité du côté Azure et GSuite est constitué du nom et prénom
C’est ce dernier point qui me semble le plus faible dans ce tutorial. En effet que faire en cas de divorce, mariage, transformation de genre, faute d’orthographe, homonyme … Il est évident que l’unicité du nom et prénom est insuffisante. Alors pourquoi proposer ce type d’attribut et de donnée ?
- Pour Google les attributs de nom et de mail sont la base de l’identification et doivent être uniques, c’est donc naturellement le choix d’Azure pour le provisioning.
Renversons la norme
Revenons à notre situation inversée, que faut-il comme attribut dans Azure AD pour établir un lien avec une identité, quelle est la définition du NameID ?
- ImmutableID, c’est un attribut persistent unique obtenu une seule fois, qui est basé sur GUID. En gros si vous synchronisez votre AD avec Azure AD, tous les utilisateurs auront cet attribut au format base64 (sauf si vous choisissez un autre attribut)
Mais comment faire dans Google Directory pour transmettre cet attribut et sa valeur ?
- En premier il faut étendre le schéma d’annuaire de Google
- En second il faut affecter une valeur à ces attributs, et là deux cas de figures :
- Soit vous avez synchronisé votre AD avec Azure et vous avez fait un choix
- Soit vous ne l’avez pas encore fait (suspense …)
Petit passage par l’API
Prenons le premier point : Pour créer un nouveau schéma dans Google Directory vous devez passer par l’API d’administration de GSuite, pour cela en résumé il faut :
- GSuite Sécurité: Activer l’accès des API au niveau sécurité
- GSuite Sécurité: Activer l’API d’Administration
- Client Application: Créer une application de type Web et obtenir un Client_Id et un Client_secret
- GSuite Sécurité: Autoriser cette application dans GSuite
- Client Application: Obtenir un access_token depuis un authorization_code pour les scopes
- https://www.googleapis.com/auth/admin.directory.userschema
- https://www.googleapis.com/auth/admin.directory.user
- Client Application: Créer le schéma et le mettre à jour
Quelques captures d’écran pour vous aider dans cette démarche :
Un choix qui n’en est pas un
Quelle valeur donner à l’attribut ImmutableID ? En théorie du moment que sa valeur est unique et inchangée tout est possible. Mais par défaut Microsoft donne une valeur quand l’objet est créé dans Azure AD et surtout il synchronise cette donnée depuis votre AD si vous synchronisez ce dernier. C’est l’inversion des normes l’identifiant d’identité vient alors de la base de compte 😉
Utiliser l’Object-GUID n’est pas une fatalité et vous avez tout intérêt à fournir un identifiant d’identité unique, irrévocable, neutre et certainement pas dépendant d’une infrastructure réseau.
Pour cela référez-vous à l’article suivant et utilisez un identifiant provenant de votre référentiel d’identité.
Il faudra ensuite synchroniser cet attribut à la fois dans GSuite et dans Azure depuis votre gestionnaire d’identité favoris.
Dans les images des moyens pour mettre à jour la donnée dans GSuite et Azure AD.
SOURCES :
Convert DirSync/MS Online Directory Immutable ID to AD GUID (and vice versa) – Microsoft 2018. https://gallery.technet.microsoft.com/office/Covert-DirSyncMS-Online-5f3563b1
Advanced REST Client – electron app – BitHub. https://github.com/advanced-rest-client/arc-electron/
Contrat G Suite – 28 mars 2012. https://gsuite.google.com/terms/2013/1/premier_terms.html[:]