Aller au contenu

Référence de l'API SCIM

Contrat d’endpoint SCIM 2.0 pour provisionner utilisateurs et groupes dans XID.utilisateurs et les groupes dans XID.

Afficher en Markdown

URL de base

XID expose des API SCIM 2.0 limitées à l’organisation sous /scim/v2/organizations/{organization_id}. Les ressources utilisateur et groupe sont adressées avec l’ID d’organisation dans le chemin.

Configurez votre fournisseur d’identité avec l’URL de base https://xid.dev/scim/v2/organizations/{organization_id} et le jeton d’annuaire affiché une seule fois lorsque vous créez ou faites tourner l’annuaire.

curl https://xid.dev/scim/v2/organizations/{organization_id}/Users \
  -H 'Authorization: Bearer scim_xxx' \
  -H 'Content-Type: application/scim+json'

Authentification

Les appels SCIM utilisent un jeton bearer d’annuaire créé depuis l’API de gestion. XID stocke uniquement un hachage du jeton et renvoie le jeton en clair une seule fois lorsqu’il est créé ou renouvelé.

En-tête Valeur Remarques
Authorization Bearer scim_xxx Requis pour les points de terminaison utilisateurs et groupes limités à l’organisation.
Content-Type application/scim+json Requis pour les requêtes POST, PUT et PATCH.
Accept application/scim+json Recommandé pour tous les clients SCIM.

Points de terminaison

Point de terminaison Méthodes Usage
/scim/v2/ServiceProviderConfig GET Réponse ServiceProviderConfig pour la découverte des clients SCIM.
/scim/v2/Schemas GET Métadonnées du schéma utilisateur et groupe.
/scim/v2/ResourceTypes GET Types de ressources SCIM pris en charge.
/scim/v2/organizations/{organization_id}/Users GET, POST Créer et lister les utilisateurs d’annuaire.
/scim/v2/organizations/{organization_id}/Users/{id} GET, PUT, PATCH, DELETE Lire, remplacer, modifier partiellement ou désapprovisionner un utilisateur d’annuaire.
/scim/v2/organizations/{organization_id}/Groups GET, POST Créer et lister les groupes d’annuaire.
/scim/v2/organizations/{organization_id}/Groups/{id} GET, PUT, PATCH, DELETE Lire, remplacer, modifier partiellement ou supprimer un groupe d’annuaire.

Ressource utilisateur

Les ressources utilisateur utilisent userName comme identifiant externe. Les valeurs e-mail, les champs de nom du profil, l’état actif et les champs d’extension entreprise sont conservés dans le profil brut SCIM.

Champ SCIM Comportement de XID
id ID utilisateur d’annuaire XID stable.
userName Requis. Doit être unique dans l’annuaire.
active false désapprovisionne l’utilisateur et révoque les sessions actives.
emails L’e-mail principal est utilisé pour la correspondance et la liaison de compte.
urn:ietf:params:scim:schemas:extension:enterprise:2.0:User Stocké et renvoyé pour les attributs d’entreprise comme le département.
{
  "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
  "userName": "alice@example.com",
  "active": true,
  "name": { "givenName": "Alice", "familyName": "Lee" },
  "emails": [{ "value": "alice@example.com", "primary": true }]
}

Ressource groupe

Les ressources groupe utilisent displayName comme nom de groupe d’annuaire unique. Les membres référencent des ID utilisateur SCIM et sont synchronisés de façon idempotente.

{
  "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
  "displayName": "Engineering",
  "members": [
    { "value": "dir_user_123", "display": "alice@example.com" }
  ]
}

Filtrage, tri et pagination

XID prend en charge la grammaire de filtre SCIM avec and, or, not et les opérateurs de comparaison (eq, ne, co, sw, ew, gt, ge, lt, le, pr). Les expressions non prises en charge renvoient invalidFilter. Les listes utilisent la pagination SCIM base 1 avec startIndex, count, totalResults, plus sortBy et sortOrder optionnels.

Requête Assistance
filter=userName eq "alice@example.com" Trouver un utilisateur par userName.
filter=displayName eq "Engineering" Trouver un groupe par displayName.
filter=userName sw "alice" and active eq true Combiner les opérateurs logiques et de comparaison.
sortBy=userName&sortOrder=ascending Trier les résultats des listes Utilisateurs ou Groupes.
startIndex=1&count=100 Renvoyer jusqu’à 100 ressources à partir du premier résultat.
attributes=userName,emails.value Renvoyer uniquement schemas, id et les attributs SCIM demandés.
excludedAttributes=emails,meta Renvoyer la ressource par défaut sans les attributs SCIM exclus.

Opérations en masse

POST /scim/v2/organizations/{organization_id}/Bulk accepte une BulkRequest jusqu’à 100 opérations et 1 Mio de charge utile. Les réponses renvoient le statut HTTP par opération dans une BulkResponse même en cas d’échecs partiels.

{
  "schemas": ["urn:ietf:params:scim:api:messages:2.0:BulkRequest"],
  "Operations": [
    {
      "method": "POST",
      "path": "/Users",
      "bulkId": "user1",
      "data": { "userName": "alice@example.com", "active": true }
    }
  ]
}

ETag and If-Match

Les réponses GET de ressource incluent ETag: W/"<meta.version>" depuis meta.version. PUT et PATCH exigent un en-tête If-Match correspondant à la version actuelle ; absence → 428, non-correspondance → 412.

Opérations PATCH

Les requêtes PATCH utilisent urn:ietf:params:scim:api:messages:2.0:PatchOp. XID prend en charge add, replace et remove pour les champs de profil modifiables et les appartenances aux groupes.

{
  "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
  "Operations": [
    { "op": "replace", "path": "active", "value": false }
  ]
}

Réponses d’erreur

Les erreurs SCIM renvoient application/scim+json avec le schéma SCIM Error, le statut HTTP, le détail et le champ facultatif scimType.

{
  "schemas": ["urn:ietf:params:scim:api:messages:2.0:Error"],
  "status": "409",
  "scimType": "uniqueness",
  "detail": "userName already exists"
}

Capacités ServiceProviderConfig

  • ServiceProviderConfig annonce sort.supported=true, bulk.supported=true et etag.supported=true.
  • XID expose des endpoints entrants de fournisseur de services SCIM pour les IdP externes. Les clients de push SCIM vers les SaaS en aval disposent de preuves locales avec un SaaS factice, mais la prise en charge en production requiert toujours un L4 réel d’administration SaaS.

Comportement de désapprovisionnement

  • La rotation du jeton d’annuaire garde l’ancien jeton valide pendant une courte période de grâce.
  • active=false et DELETE /Users/{id} désapprovisionner l’utilisateur et révoquer les sessions actives.
  • Les mises à jour d’appartenance aux groupes sont idempotentes. Les membres inconnus peuvent être résolus après l’arrivée de l’utilisateur depuis le fournisseur d’identité.
Navigation

Saisissez votre recherche...

Utilisez les touches fléchées pour naviguerAppuyez sur Entrée pour sélectionnerAppuyez sur Échap pour fermer