Points de terminaison de l'API du serveur SCIM Drupal
Marché
Ce document décrit les points de terminaison SCIM nécessaires à l'activation du provisionnement et du déprovisionnement des utilisateurs SCIM. SCIM est un protocole standard du secteur qui permet d'automatiser les opérations CRUD (Créer, Lire, Mettre à jour, Supprimer) des utilisateurs. moduleLe site Drupal pourra ainsi faire office de serveur SCIM. Cela signifie que toute modification effectuée sur le fournisseur d'identité (c'est-à-dire le client SCIM) sera synchronisée avec le site Drupal.
Aperçu de SCIM
- Version du protocole : SCIM2.0
- Chemin de base : base_url/scim
- Ressources prises en charge : Utilisateurs, Groupes
- Format de données: JSON
Authentification et en-têtes
- Autorisation: Jeton au porteur
- Content-Type: application / json
- Acceptez: application / json
Opérations API prises en charge
Les opérations API suivantes sont prises en charge
Points de terminaison utilisateur
- Désactiver l'utilisateur
- Obtenir l'utilisateur
- Liste des utilisateurs
- Mise à jour utilisateur (correctif)
- Mettre à jour l'utilisateur (PUT)
- Créer un utilisateur (POST)
Points de terminaison du groupe
- Liste des groupes
- Obtenir le groupe par ID
- Créer un groupe
- Mettre à jour le groupe [Attributs non membres]
- Groupe de mise à jour [Membres]
- Supprimer le groupe
Points de terminaison utilisateur
1. Désactiver l'utilisateur (PATCH)
- Les erreurs:
- Exemple de demande :
- Exemple de réponse - 204 Aucun contenu.
Pour désactiver ou supprimer un utilisateur dans Drupal, vous devez activer les paramètres nécessaires dans le module. Ces options sont disponibles sur la page de configuration du module.
PATCH /Utilisateurs/{user-id}| Erreur | État | Code d'état HTTP |
|---|---|---|
| Exception de validation | Soit le module n'est pas activé, soit la clé de licence utilisée est incorrecte. | 400 |
| Exception non autorisée | L'en-tête d'autorisation est invalide ou manquant. | 401 |
| Exception RessourceIntrouvable | L'utilisateur spécifié n'existe pas. | 404 |
PATCH /Users/{user-id} HTTP/1.1 Content-Type: application/json Authorization: Bearer { "Opérations": [ { "op": "Remplacer", "chemin": "actif", "valeur": false } ] }
{ "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"], "id": "4", "userName": "username", "active": , "emails": [{ "primary": true, "value": "example@example.com", "type": "work", "display": "example@example.com" }], "meta": { "resourceType": "User" } }
2. Rechercher un utilisateur par son identifiant
- Les erreurs:
- Exemple de demande :
- Exemple de réponse :
- 404 Introuvable.
- 200 OK trouvés.
Pour récupérer un utilisateur existant, effectuez une requête GET à /Utilisateurs en utilisant leur identifiant utilisateur.
GET /Users/{user-id}| Erreur | État | Code d'état HTTP |
|---|---|---|
| Exception de validation | Soit le module n'est pas activé, soit la clé de licence utilisée est incorrecte. | 400 |
| Exception non autorisée | L'en-tête d'autorisation est invalide ou manquant. | 401 |
| Exception RessourceIntrouvable | L'utilisateur spécifié n'existe pas. | 404 |
GET /Users/{user-id} HTTP/1.1 Authorization: Bearer { "schemas": [ "urn:ietf:params:scim:api:messages:2.0:Error" ], "detail": "Utilisateur introuvable", "status": 404 }
{ "schemas": [ "urn:ietf:params:scim:schemas:core:2.0:User" ], "id": "4", "userName": "username", "active": 1, "emails": [ { "primary": true, "value": "example@example.com", "type": "work", "display": "example@example.com" } ], "meta": { "resourceType": "User" } }
3. Liste des utilisateurs
- Les erreurs:
- Paramètres de la requête :
- Exemple de demande :
- Exemple de réponse :
- Exemple de demande :
- Exemple de réponse :
- Si l'utilisateur est introuvable avec le nom d'utilisateur spécifié, nous envoyons un schéma vide indiquant qu'aucun utilisateur n'a été trouvé.
- Exemple de demande :
- Exemple de réponse :
- Si l'utilisateur présente l'e-mail.
- Si l'utilisateur est introuvable par e-mail, le module envoie un schéma vide indiquant que l'utilisateur n'a pas été trouvé.
Ce point de terminaison vous permet de filtrer et de récupérer des utilisateurs spécifiques à partir de la liste d'utilisateurs existante. En effectuant une requête GET à l'adresse suivante : /Utilisateurs En ajoutant des paramètres de filtrage à ce point de terminaison, vous pouvez affiner les résultats en fonction d'attributs tels que le nom d'utilisateur et l'adresse électronique. Ce point de terminaison prend en charge les recherches filtrées, mais ne peut renvoyer que 50 enregistrements d'utilisateurs par requête.
| Erreur | État | Code d'état HTTP |
|---|---|---|
| Exception de validation | Soit le module n'est pas activé, soit la clé de licence utilisée est incorrecte. | 400 |
| Exception non autorisée | L'en-tête d'autorisation est invalide ou manquant. | 401 |
| Exception RessourceIntrouvable | L'utilisateur spécifié n'existe pas. | 404 |
OBTENIR /Utilisateurs
3.1 Index de départ et nombre
Elle accepte les paramètres de requête startIndex et count. startIndex correspond à l'identifiant de départ et count au nombre maximal de résultats que la requête peut renvoyer.
GET /Users?startIndex=1&count=50 Autorisation : Bearer
{ "schemas": [ "urn:ietf:params:scim:api:messages:2.0:ListResponse" ], "totalResults": 2, "startIndex": 1, "itemsPerPage": 2, "Resources": [ { "id": "1", "externalId": "1", "meta": { "resourceType": "User" }, "schemas": [ "urn:ietf:params:scim:schemas:core:2.0:User" ], "userName": "example1@example.com", "displayName": "example1@example.com", "emails": { "value": "example1@example.com", "type": "work", "primary": true }, "active": true, "name": { "familyName": "", "givenName": "" }, "groups": [ "authenticated,administrator" ], "department": "" }, { "id": "13", "externalId": "13", "meta": { "resourceType": "User" }, "schemas": [ "urn:ietf:params:scim:schemas:core:2.0:User" ], "userName": "example2", "displayName": "example2", "emails": { "value": "example2@example.com", "type": "work", "primary": true }, "active": true, "name": { "familyName": "", "givenName": "" }, "groups": [ "authenticated,administrator" ], "department": "" }, ] }
3.2 Rechercher un utilisateur par son nom d'utilisateur
GET /Users?filter=userName eq "admin"
Utilisateur introuvable - 200 Ok.
{ "schemas": [ "urn:ietf:params:scim:api:messages:2.0:ListResponse" ], "totalResults": 0, "startIndex": 1, "itemsPerPage": 0, "Resources": [] }
Utilisateur trouvé - 200 Ok.
{ "schemas": [ "urn:ietf:params:scim:api:messages:2.0:ListResponse" ], "totalResults": 1, "startIndex": 1, "itemsPerPage": 10, "Resources": [ { "schemas": [ "urn:ietf:params:scim:schemas:core:2.0:User" ], "id": "uid de l'utilisateur", "username": "admin", "emails": [ { "value": "email@gmail.com", "primary": true, "type": "work" } ] } ] }
3.3 Rechercher l'utilisateur par son adresse e-mail
GET /Users?filter=emails[type eq "work"].value eq "email@gmail.com" Authorization: Bearer
Utilisateur trouvé - 200 Ok.
{ "schemas": [ "urn:ietf:params:scim:api:messages:2.0:ListResponse" ], "totalResults": 1, "startIndex": 1, "itemsPerPage": 10, "Resources": [ { "schemas": [ "urn:ietf:params:scim:schemas:core:2.0:User" ], "id": "uid de l'utilisateur", "username": "Nom d'utilisateur", "emails": [ { "value": "email@gmail.com", "primary": true, "type": "work" } ] } ] }
Utilisateur introuvable - 200 Ok.
{ "schemas": [ "urn:ietf:params:scim:api:messages:2.0:ListResponse" ], "totalResults": 0, "startIndex": 1, "itemsPerPage": 0, "Resources": [] }
4. Mise à jour utilisateur (PATCH)
Si l'utilisateur est trouvé lors de la requête GET, une requête PATCH ou PUT sera effectuée pour le mettre à jour ; sinon, une requête POST sera effectuée pour le créer. Vous pouvez mettre à jour des champs spécifiques d'un utilisateur à l'aide d'un PATCH demande à la /Utilisateurs Point de terminaison. Dans le corps de la requête, incluez l'attribut que vous souhaitez modifier et sa nouvelle valeur.
PATCH /Utilisateurs/{user-id}- Les erreurs:
- Exemple de demande :
- Exemple de réponse : 200 OK.
| Erreur | État | Code d'état HTTP |
|---|---|---|
| Exception de validation | Soit le module n'est pas activé, soit la clé de licence utilisée est incorrecte. | 400 |
| Exception non autorisée | L'en-tête d'autorisation est invalide ou manquant. | 401 |
| Exception RessourceIntrouvable | L'utilisateur spécifié n'existe pas. | 404 |
PATCH/Utilisateurs/{{user-id}} HTTP/1.1 Content-Type: application/json Authorization: Bearer { "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"], "Operations": [ { "op": "Replace", "path": "emails[type eq \"work\"].value", "value": "email@gmail.com" }, { "op": "Replace", "path": "name.familyName", "value": "familyname" } ] }
{ "schemas": [ "urn:ietf:params:scim:schemas:core:2.0:User" ], "id": "uid de l'utilisateur", "userName": "Nom d'utilisateur", "active": 1, "emails": [ { "primary": true, "value": "email@gmail.com", "type": "work", "display": "email@gmail.com" } ], "meta": { "resourceType": "User" } }
5. Mise à jour de l'utilisateur (PUT)
Vous pouvez mettre à jour un utilisateur à l'aide d'une requête PUT vers le /Utilisateurs Point de terminaison. Cette requête remplace l'objet utilisateur complet ; par conséquent, tous les attributs utilisateur requis doivent être fournis dans le corps de la requête.
PUT /Users/{{user-id}}- Les erreurs:
- Exemple de demande :
- Exemple de réponse : 200 ok.
| Erreur | État | Code d'état HTTP |
|---|---|---|
| Exception de validation | Soit le module n'est pas activé, soit la clé de licence utilisée est incorrecte. | 400 |
| Exception non autorisée | L'en-tête d'autorisation est invalide ou manquant. | 401 |
| Exception RessourceIntrouvable | L'utilisateur spécifié n'existe pas. | 404 |
PUT/Users/{{user-id}} HTTP/1.1 Content-Type: application/json Authorization: Bearer { "schemas": [ "urn:ietf:params:scim:schemas:core:2.0:User" ], "id": "97", "userName": "exmple", "active": 1, "emails": [ { "primary": true, "value": "exmple@example.com", "type": "work", "display": "exmple@example.com" } ], "meta": { "resourceType": "User" }, "name": { "givenName": "givenName", "familyName": "familyName", "middleName": "sdf", "honorificPrefix": "sdf" }, "displayName": "givenName familyName", "nickName": "df", "addresses": [ { "primary": true, "locality": "fdd" } ], "locale": "en-US", "externalId": "9rqltOOLI95d7", "groupes": [] }
{ "schemas": [ "urn:ietf:params:scim:schemas:core:2.0:User" ], "id": "97", "userName": "example", "active": 1, "emails": [ { "primary": true, "value": "example@example.com", "type": "work", "display": "example@example.com" } ], "meta": { "resourceType": "User" } }
6. Créer un utilisateur (POST)
Utilisez une requête POST sur le /Utilisateurs Point de terminaison pour créer un nouvel utilisateur. Veillez à inclure tous les champs nécessaires dans le corps de la requête. Une requête réussie renvoie le code 201 (Créé) et les informations de l'utilisateur.
POST /Utilisateurs
- Les erreurs:
- Exemple de demande :
- Exemple de réponse : 201 créé.
| Erreur | État | Code d'état HTTP |
|---|---|---|
| Exception de validation | Soit le module n'est pas activé, soit la clé de licence utilisée est incorrecte. | 400 |
| Exception non autorisée | L'en-tête d'autorisation est invalide ou manquant. | 401 |
| Exception de conflit | Cet utilisateur existe déjà. | 409 |
POST /Users HTTP/1.1 Accept: application/json Content-Type: application/json Authorization: Bearer { "schemas": [ "urn:ietf:params:scim:schemas:core:2.0:User", "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"], "externalId": "abc", "userName": "example", "active": true, "emails": [{ "primary": true, "type": "work", "value": "example@example.com" }], "meta": { "resourceType": "User" }, "name": { "formatted": "first name last name", "familyName": "last name", "givenName": "first name" } }
{ "schemas": [ "urn:ietf:params:scim:schemas:core:2.0:User", "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User" ], "externalId": "abc", "userName": "example", "active": true, "emails": [ { "primary": true, "type": "work", "value": "example@example.com" } ], "meta": { "resourceType": "User" }, "name": { "formatted": "first name last name", "familyName": "last name", "givenName": "first name" }, "id": "98" }
Points de terminaison du groupe
1. Liste des groupes
Le /Groupes Ce point de terminaison prend en charge les requêtes GET pour récupérer la liste des groupes disponibles sur le serveur SCIM. Cette opération ne renvoie que les informations de base du groupe, telles que son ID et son nom d'affichage. La liste des membres est toujours vide, car le point de terminaison n'inclut pas les détails d'appartenance au groupe dans la réponse.
- Exemple de demande :
- Exemple de réponse : 200 ok
- Filtre pris en charge :
- Exemple de demande :
- Exemple de réponse : 200 ok.
GET /Groups HTTP/1.1 Authorization: Bearer
{ "schemas": [ "urn:ietf:params:scim:api:messages:2.0:ListResponse" ], "totalResults": 4, "Resources": [ { "id": "anonymous", "meta": { "resourceType": "Group" }, "schemas": [ "urn:ietf:params:scim:schemas:core:2.0:Group" ], "displayName": "anonymous" }, { "id": "authenticated", "meta": { "resourceType": "Group" }, "schemas": [ "urn:ietf:params:scim:schemas:core:2.0:Group" ], "displayName": "authenticated" }, { "id": "administrator", "meta": { "resourceType": "Group" }, "schemas": [ "urn:ietf:params:scim:schemas:core:2.0:Group" ], "displayName": "administrator" }, { "id": "editor_admin", "meta": { "resourceType": "Group" }, "schemas": [ "urn:ietf:params:scim:schemas:core:2.0:Group" ], "displayName": "editor_admin" } ], "startIndex": 1, "itemsPerPage": 4 }
GET /Groups?filter=displayName eq "administrateur"
GET /scim/Groups?filter=displayName eq "administrator" HTTP/1.1 Authorization: Bearer
Si un groupe est trouvé avec le nom d'affichage.
{ "schemas": [ "urn:ietf:params:scim:api:messages:2.0:ListResponse" ], "totalResults": 0, "Resources": [], "startIndex": 1, "itemsPerPage": 20 }
2. Rechercher par groupe d'identifiants
/Groupes/{id} Récupère la ressource de groupe associée à l'identifiant de groupe fourni. Seules les métadonnées du groupe sont renvoyées dans la réponse. Les informations relatives aux membres ne sont pas incluses.
- Exemple de demande :
- Exemple de réponse :
GET /Groups/administrator HTTP/1.1 Authorization: Bearer
Trouvé - 200 OK.
{ "schemas": [ "urn:ietf:params:scim:schemas:core:2.0:Group" ], "id": "administrator", "meta": { "resourceType": "Group" }, "displayName": "Administrator" }
Introuvable - 404.
{ "schemas": [ "urn:ietf:params:scim:api:messages:2.0:Error" ], "detail": "Administrateur de groupe introuvable", "status": 404 }
3. Créer un groupe
Utiliser un POSTEZ demande à /Groupes Pour créer un nouveau groupe, vous devez lui fournir un nom (displayName). Bien que vous puissiez inclure des membres dans le corps de la requête, la réponse renverra toujours une liste vide de membres.
- Les erreurs:
- Exemple de demande :
- Demande sans liste de membres.
- Demande avec liste des membres.
- Réponse : 201 Créé.
| Erreur | État | Code d'état HTTP |
|---|---|---|
| Exception de validation | Soit le module n'est pas activé, soit la clé de licence utilisée est incorrecte. | 400 |
| Exception non autorisée | L'en-tête d'autorisation est invalide ou manquant. | 401 |
| OperationNotSupportedExceptionOperationNotSupportedExceptionOperationNotSupportedExceptionOperationNotSupportedException | La modification de groupe n'est pas autorisée. | 501 |
POST /Groupes HTTP/1.1 Autorisation : Bearer { "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"], "externalId": "enternal-id", "displayName": "group2", "meta": { "resourceType": "Group" } }
POST /Groupes HTTP/1.1 Content-Type: application/json Authorization: Bearer { "schemas": [ "urn:ietf:params:scim:schemas:core:2.0:Group" ], "displayName": "group1", "members": [ { "value": "3", "display": "admin@gmail.com" }, { "value": "2", "display": "admin2@gmail.com" } ] }
{ "schemas": [ "urn:ietf:params:scim:schemas:core:2.0:Group" ], "externalId": "enternal-id", "displayName": "group2", "meta": { "resourceType": "Group" }, "members": [], "id": "group2" }
4. Mise à jour du groupe [Attributs des non-membres]
Vous pouvez mettre à jour les informations de base d'un groupe, comme son nom d'affichage, à l'aide d'une requête PATCH. /Groupes/{id-groupe}Cette requête met à jour uniquement les attributs que vous fournissez et ne modifie pas les membres du groupe. Une mise à jour réussie renvoie le code 204 (Aucun contenu).
- Exemple de demande :
- Exemple de réponse - 204 Aucun contenu.
PATCH /Groups/group1 HTTP/1.1 Authorization: Bearer{ "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"], "Operations": [{ "op": "Replace", "path": "displayName", "value": "updated group1" }] }
5. Mise à jour du groupe [Membres]
Le /Groupes/{id} Ce point de terminaison permet d'ajouter et de supprimer des membres via une requête PATCH. Le corps de la requête doit inclure la liste des identifiants des utilisateurs à ajouter. Cette action met uniquement à jour les membres du groupe et renvoie le code 204 (Aucun contenu) en cas de succès.
- Exemple de demande :
- Ajouter un membre au groupe.
- Retirer le membre du groupe.
- Exemple de réponse : 204 Aucun contenu.
PATCH /Groups/updated group1 HTTP/1.1 Content-Type: application/json Authorization: Bearer { "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"], "Operations": [{ "op": "Ajouter", "path": "membres", "value": [{ "$ref": null, "value": "97" }] }] }
PATCH /Groups/updated group1 HTTP/1.1 Authorization: Bearer { "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"], "Operations": [{ "op": "Supprimer", "path": "members", "value": [{ "$ref": null, "value": "97" }] }] }
6. Supprimer le groupe
Le /Groupes/{id} Le point de terminaison prend en charge la suppression d'un groupe à l'aide d'un EFFACER requête. Cette opération supprime le groupe du serveur SCIM. Une suppression réussie renvoie une 204 Aucun contenu Aucune réponse n'est fournie, indiquant que le groupe a été supprimé.
- Exemple de demande :
- Exemple de réponse - 204 Aucun contenu.
SUPPRESSION /Groupes/updated group1 HTTP/1.1 Autorisation : Bearer
Si la configuration n'a pas réussi, veuillez nous contacter à drupalsupport@xecurify.com. Veuillez envoyer la capture d'écran de la fenêtre d'erreur et nous vous aiderons à résoudre le problème et vous guiderons tout au long de la configuration.
