Aller au contenu
Documentation : Provisionnement avec SCIM

Provisionnement avec SCIM

Le fournisseur d'identité crée, met à jour et déprovisionne les comptes et garde les rôles dans les espaces de travail en phase avec ses groupes : ce qu'il faut vérifier d'abord, le jeton, les étapes chez chaque fournisseur, et les points de terminaison que Ronne sert.

Décrit Ronne AI Marketplace 0.4.0. Traduite de l'anglais.

Provisionnement avec SCIM

Avec SCIM, le fournisseur d'identité crée, met à jour et déprovisionne lui-même les comptes Ronne, et garde les rôles dans les espaces de travail en accord avec ses groupes. Quand quelqu'un part, le fournisseur désactive son compte à sa prochaine synchronisation : ses sessions et ses jetons d'accès prennent fin aussitôt, sans que root ait à penser à le faire. Le déprovisionnement désactive un compte; il ne l'efface jamais : les éléments publiés par la personne conservent donc leur historique.

SCIM se configure par fournisseur, sur la page du fournisseur sous Admin › Settings › Authentication, dans la section Provisioning (SCIM). Il n'exige pas que la connexion par ce fournisseur soit activée, mais les personnes créées par SCIM n'ont pas de mot de passe : elles se connectent par le fournisseur.

Avant de l'activer

  • Les courriels correspondent. Le fournisseur envoie le courriel de chaque personne comme userName. Une personne dont le courriel dans Ronne en diffère obtient un second compte, auquel elle ne peut pas se connecter, tandis que le premier reste hors de SCIM. Changez d'abord ces courriels dans Utilisateurs; si un second compte a tout de même été créé, effacez le second après avoir corrigé le courriel.
  • Les comptes existants ne sont repris que si c'est sûr. Quand le fournisseur crée une personne qui a déjà un compte, Ronne ne reprend ce compte que si son courriel est exactement le userName, que la personne s'est connectée par ce fournisseur dans les 30 derniers jours, que le compte n'a jamais été relié par SCIM auparavant, qu'il n'est pas root et qu'il est activé. Sinon, le fournisseur reçoit un conflit (409) et le compte reste tel quel. Faites donc connecter les gens par le fournisseur dans les 30 jours qui précèdent le début du provisionnement.
  • Les groupes s'assignent dans SCIM. Désormais, SCIM est la seule source des groupes de ce fournisseur (Groupes SCIM et rôles dans les espaces de travail). Les rôles donnés par la connexion restent jusqu'au premier changement de groupe du fournisseur qui inclut la personne : poussez donc les groupes associés.
  • Les personnes parties sont déjà désactivées. Une personne partie avant SCIM, ou qui n'y est pas assignée chez le fournisseur, n'est jamais déprovisionnée par lui : désactivez-la dans Users.

L'activation et le jeton

  1. Turn on SCIM, et confirmez. La section affiche l'URL de base, https://ronne.example.com/api/v1/scim/v2, avec Copy.
  2. Generate token. Il commence par scim_ et n'est affiché qu'une fois : Ronne n'en garde que le hachage. Collez-le dans les réglages SCIM du fournisseur, comme jeton Bearer.
  3. Suivez plus bas les étapes de votre fournisseur, puis lancez le provisionnement chez lui.

La section indique quand le jeton a été créé, par qui, et quand il a été utilisé pour la dernière fois. Rotate crée un nouveau jeton, et l'actuel continue de fonctionner pendant 24 heures, pour que vous puissiez le changer chez le fournisseur sans vous presser. Revoke l'arrête aussitôt, et celui d'avant une rotation aussi. Turn off SCIM refuse aussitôt toute requête et garde les comptes, les liens, les groupes et le jeton, pour quand vous le réactiverez. Une requête avec un jeton erroné, révoqué ou ancien est refusée avec 401, et le refus figure dans le journal d'audit.

Ce que le fournisseur fait aux comptes

  • Créer : un nouveau compte, un user dans global avec un espace de travail personnel et sans mot de passe, jamais root. Son nom et son courriel viennent du fournisseur.
  • Mettre à jour : le nom et le courriel. Tant que SCIM est activé, le fournisseur en est la seule source : Users ne permet pas de les modifier, et la prochaine synchronisation du fournisseur rétablit ce qu'il indique.
  • Désactiver (active: false) : le compte est désactivé, ses sessions prennent fin et ses jetons d'accès sont révoqués, en une seule étape. La prochaine page qu'il ouvre est la page de connexion, et rmk reçoit 401. Ses rôles dans les espaces de travail restent. Réactiver (active: true) l'active de nouveau; la personne se reconnecte, et ses jetons révoqués restent révoqués.
  • Supprimer : le compte est désactivé de la même façon, il perd tous les rôles dans les espaces de travail que le fournisseur lui a donnés, et SCIM cesse de le gérer. Il reste dans Ronne, marqué Deprovisioned by <provider>, désactivé. Si le fournisseur crée de nouveau la même personne (le même externalId), le même compte revient, activé. Root peut ensuite l'effacer depuis sa page : retirez d'abord la personne chez le fournisseur, sinon sa prochaine synchronisation crée un nouveau compte, vide.
  • Root n'est jamais touché : une requête qui vise un compte root est refusée, et un root dans un groupe est laissé de côté. Les comptes root se gèrent dans Ronne.

Dans Utilisateurs, ces comptes affichent Managed by <provider>, un compte repris affiche aussi Adopted by <provider> on <date>, pour que vous puissiez vérifier chaque reprise, et un compte supprimé Deprovisioned by <provider> on <date>. Sur la page de l'utilisateur, Disable et Enable fonctionnent toujours, mais un avis prévient que la prochaine synchronisation du fournisseur annule le changement : faites le changement chez le fournisseur. Reset password donne un mot de passe à l'un de ces comptes, pour le cas où le fournisseur ne peut pas connecter les gens.

Groupes SCIM et rôles dans les espaces de travail

Les groupes SCIM du fournisseur donnent des rôles dans les espaces de travail par les mêmes associations que sa connexion (Groupes et rôles dans les espaces de travail), et selon les mêmes règles : un groupe associé donne dans son espace de travail au moins le rôle associé, le plus élevé de deux rôles l'emporte, une appartenance définie à la main n'est jamais changée, root non plus, et personne ne quitte global. Une association correspond exactement au nom d'un groupe ou à son externalId : les associations faites pour la revendication de groupes d'Entra (des ID d'objet) continuent donc de fonctionner.

  • Quand le fournisseur ajoute une personne à un groupe, l'en retire, renomme le groupe ou le supprime, les rôles des personnes concernées suivent aussitôt.
  • Tant que SCIM est activé, la connexion par ce fournisseur n'applique plus sa revendication de groupes : SCIM est la seule source. Une fois SCIM désactivé, la connexion l'applique de nouveau.
  • Activer SCIM, ou reprendre un compte, ne change aucun rôle. Les rôles donnés par la connexion restent jusqu'au premier changement de groupe du fournisseur qui inclut la personne, qui applique les associations à partir des groupes SCIM.
  • Une personne supprimée perd aussitôt tous les rôles que le fournisseur lui a donnés; une personne désactivée les garde tant qu'elle est désactivée.
  • Un groupe qu'aucune association ne nomme est conservé et ne donne rien.

Chaque changement figure dans le journal d'audit comme un changement de membre, marqué comme venant du fournisseur.

Microsoft Entra ID

  1. Dans le centre d'administration Entra, sous Entra ID › Enterprise apps, ouvrez l'application de Ronne (ou New application › Create your own application, pas depuis la galerie), puis Provisioning.
  2. Créez une nouvelle configuration avec Bearer authentication : l'URL de base comme Tenant URL et le jeton comme Secret Token. Lancez Test Connection, puis créez-la.
  3. Dans Attribute mapping, pour les utilisateurs, associez objectId à externalId. La valeur par défaut d'Entra, mailNickname, est un alias qui peut être donné à une nouvelle personne, qui reviendrait alors comme l'ancien compte. L'externalId des groupes est déjà leur objectId.
  4. Assignez les utilisateurs et les groupes à provisionner dans Users and groups, puis choisissez Start provisioning. Entra synchronise environ toutes les 40 minutes; Provision on demand traite une personne tout de suite.

Entra met active à false quand une personne n'est plus assignée ou est désactivée, et la supprime quand elle est supprimée définitivement.

Okta

  1. Ouvrez l'application de Ronne (l'application OIDC de la section Okta). Dans son onglet General, modifiez App Settings et choisissez SCIM comme Provisioning.
  2. Dans l'onglet Provisioning, Integration : l'URL de base comme SCIM connector base URL, userName comme champ d'identifiant unique des utilisateurs, les actions Push New Users, Push Profile Updates et Push Groups, et l'authentification HTTP Header avec le jeton.
  3. Sous To App, activez Create Users, Update User Attributes et Deactivate Users.
  4. Assignez les personnes, puis poussez les groupes que Ronne associe, dans l'onglet Push Groups.

Okta désactive les personnes (active: false) et ne les supprime pas.

authentik

  1. Applications › Providers › Create › SCIM Provider, avec l'URL de base comme URL et le jeton comme jeton.
  2. Modifiez l'application de Ronne et ajoutez le fournisseur SCIM sous Backchannel Providers. authentik envoie alors à Ronne les personnes auxquelles l'application est liée (tout le monde, quand elle n'est liée à personne) et les groupes, quand ils changent et une fois par heure.

Keycloak

Keycloak ne peut pas envoyer de SCIM par lui-même. Une extension communautaire qui provisionne des utilisateurs et des groupes vers un serveur SCIM le peut : installez-en une dans Keycloak et donnez-lui l'URL de base, et le jeton comme jeton Bearer. L'équipe de Keycloak ne prend pas ces extensions en charge : testez-en une avant de vous y fier.

Auth0

Auth0 n'a pas de client SCIM pour provisionner une autre application : son SCIM sert à recevoir des utilisateurs. Ses Event Streams peuvent déclencher votre propre code qui appelle le SCIM de Ronne; sinon, les gens obtiennent leur compte en se connectant par Auth0, et les personnes parties sont désactivées dans Users.

Autres fournisseurs

Donnez au fournisseur l'URL de base, et le jeton comme jeton Bearer. Il doit envoyer le courriel de la personne comme userName, et comme externalId un identifiant qui ne change jamais et n'est jamais donné à quelqu'un d'autre. Les associations de groupes correspondent au nom d'un groupe ou à son externalId. Les points de terminaison SCIM indiquent ce que Ronne accepte.

Points de terminaison SCIM

Ronne sert SCIM 2.0 (RFC 7643 et 7644) à https://ronne.example.com/api/v1/scim/v2, pour les clients des fournisseurs. Toute requête sauf la découverte exige Authorization: Bearer scim_…; les réponses sont en application/scim+json, et les erreurs utilisent le format d'erreur de SCIM.

CheminCe qu'il accepte
ServiceProviderConfig, ResourceTypes, SchemasGET, sans jeton : ce que Ronne prend en charge, et les schémas de base User et Group.
UsersGET (une page de 100 au plus, avec startIndex et count, et un filtre) et POST.
Users/<id>GET, PUT, PATCH et DELETE.
Groups, Groups/<id>Les mêmes; excludedAttributes=members laisse les membres de côté.
  • Filtres : eq seulement : sur userName, externalId et id pour Users, et sur displayName, externalId et id pour Groups. Les courriels sont comparés en minuscules.
  • Users accepte userName (le courriel, en ASCII simple), name ou displayName, externalId et active, et un PATCH de emails change le courriel; les autres attributs sont ignorés. Les rôles, les mots de passe et les groupes d'un utilisateur sont en lecture seule : l'appartenance change par Groups. L'id est celui du lien SCIM, pas celui du compte; après un DELETE, il répond 404 partout.
  • PATCH accepte add, replace et remove, avec un chemin ou sous forme d'objet valeur, comme Entra et Okta les envoient; "False" est lu comme false. Les membres des groupes sont des id d'utilisateurs SCIM, retirés un par un avec members[value eq "…"].
  • Erreurs : 400 pour une requête invalide (invalidValue, invalidSyntax, invalidFilter, invalidPath, noTarget, mutability pour le retrait de active, de userName ou du displayName d'un groupe), 401 pour tout problème de jeton ou si SCIM est désactivé, 403 pour un compte root, 404, 405 pour une méthode qu'un chemin n'accepte pas, 409 uniqueness pour un userName, un courriel ou un externalId déjà utilisé, 413 et 415 pour un corps trop gros ou qui n'est pas du JSON, et 429 avec Retry-After au-delà de 600 requêtes par minute et par jeton.
  • Non pris en charge : les opérations en bloc et /Me (501), le tri, les ETags et le changement de mot de passe.