Authentification par clé API
L’authentification par clé API est l’une des méthodes les plus simples pour protéger les API REST de Drupal. Une fois que vous avez généré des clés API pour tous vos utilisateurs, vous pouvez ensuite utiliser ces clés pour sécuriser l’accès à vos API REST Drupal.
Pour ce faire, il suffit d’envoyer le nom d’utilisateur Drupal ainsi que la clé API dans l’en-tête Authorization de chacune de vos requêtes API. Le module Drupal API Authentication authentifiera alors la requête en fonction du nom d’utilisateur et de la clé API correspondante. Ce module est compatible avec Drupal 7, Drupal 8, Drupal 9, Drupal 10 et Drupal 11.
Vidéo de configuration :
Prérequis : téléchargement et installation :
- Téléchargez et installez le module Drupal REST & JSON API Authentication.
- REST UI : ce module vous fournit une interface utilisateur pour configurer le module REST.
- Activez les modules de services web suivants dans la section Étendre (/admin/modules) de votre site Drupal :
- REST UI
- RESTful Web Services
- Serialization
Étapes pour configurer l’authentification par clé API dans Drupal :
- Pour une meilleure compréhension, nous prendrons l’exemple d’ajouter une authentification par clé API à l’API de création d’utilisateur de Drupal.
- Notez bien que l’API /entity/user de Drupal est utilisée pour créer un utilisateur dans Drupal.
Activez l’API et assignez les méthodes et opérations comme suit :
- La première étape consiste à activer l’API et à assigner les méthodes et opérations autorisées pour cette API. Cela peut être fait via le module REST UI ou en modifiant la configuration directement.
- Pour activer l’API via le module REST UI, cliquez sur le bouton Configurer du module REST UI (comme montré ci-dessous) :
- Dans notre exemple, il faut activer l’API /entity/user. Activez cette API via l’option d’activation devant elle.
- Puisque notre objectif est de créer un utilisateur dans Drupal, sélectionnez les configurations suivantes :
- Méthode : POST
- Format : json
- Fournisseur d’authentification : rest_api_authentication
- La sélection de rest_api_authentication permettra au module miniOrange REST API Authentication d’authentifier votre API /entity/user. Cliquez sur le bouton Enregistrer la configuration pour continuer.
Créer un champ clé API utilisateur dans Drupal :
Note : si vous utilisez la version gratuite du module, vous pouvez passer cette étape.
Dans cette étape, nous allons configurer la manière dont la clé API sera utilisée pour authentifier les appels API. Pour ce faire, il faut d’abord créer un champ attribut utilisateur pour stocker une clé API.
- Allez à l’onglet de gestion des champs utilisateur (/admin/config/people/accounts/fields) dans Drupal.
- Pour ajouter un champ, cliquez sur le bouton Ajouter un champ.
- Dans la liste déroulante Ajouter un nouveau champ, sélectionnez l’option Texte (simple) et saisissez Clé API dans le champ label. Cliquez ensuite sur le bouton Enregistrer et continuer pour sauvegarder vos paramètres.
- Assurez-vous que le nom machine du champ utilisateur soit field_api_key.
- Poursuivez en cliquant sur Enregistrer les paramètres du champ puis sur Enregistrer les paramètres pour finaliser la création du champ.
- Vous pouvez désormais voir un champ supplémentaire Clé API dans le profil utilisateur.
Configurer l’authentification par clé API :
- Dans cette étape, nous allons générer une clé API. Pour cela, rendez-vous à l’onglet Authentification API du module REST API Authentication (/admin/config/people/rest_api_authentication/auth_settings).
- Cochez la case Activer l’authentification puis cliquez sur Enregistrer les paramètres.
- Pour activer l’authentification par clé API, sélectionnez le bouton radio Clé API.
- Sur la même page, vous pouvez générer la clé API pour un utilisateur spécifique ou pour tous les utilisateurs en une seule fois.
- Nous allons générer la clé API pour un seul utilisateur dans cet exemple.
- Dans le champ texte Entrer le nom d’utilisateur, saisissez le nom d’utilisateur pour lequel vous souhaitez générer la clé API, puis cliquez sur le bouton Générer la clé API pour cet utilisateur.
- Vous pouvez désormais voir la clé API générée dans le champ clé API de votre profil utilisateur.
- Gardez cette clé API à portée de main, elle sera utilisée plus tard pour l’authentification des API.
Attribuer aux rôles Drupal la permission de créer un utilisateur :
- Si besoin, vous pouvez aussi donner à des rôles Drupal non administrateurs la permission de créer un utilisateur. Pour cela, assignez aux rôles Drupal la permission Gérer les utilisateurs dans la section permissions (/admin/people/permissions) de votre site Drupal.
Voilà, c’est tout !!!
- Essayons maintenant de créer un utilisateur dans Drupal via un appel API en utilisant une clé API pour l’authentification.
Exemple :
- Pour créer un utilisateur dans Drupal, vous devez effectuer une requête POST en incluant le nom d’utilisateur et la clé API délivrée par le module miniOrange REST API Authentication. Les valeurs du nom d’utilisateur et de la clé API doivent être encodées en base64. Vous pouvez vous référer au format ci-dessous pour faire un appel.
Requête : POST <votre_url_base_drupal>/entity/user?_format=json
En-tête : Authorization: Basic base64encodé <username:api_key>
Accept: application/json
Content-Type: application/jsonCorps :
{
"name": [
{"value": "<username>"}
],
"mail": [
{"value": "<email>"}
],
"pass":[
{"value": "<password>"}
],
"status":[
{"value": "1"}
]
}Format de la requête CURL -
curl --location --request POST ‘<votre_url_base_drupal>/entity/user?_format=json' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic base64encodé<username:clé API>' \
--data-raw '{
"name": [
{"value": "NomUtilisateur"}
],
"mail": [
{"value": "email"}
],
"pass":[
{"value": "MotDePasse"}
],
"status":[
{"value": "1"}
]
}'
- Vous pouvez également vous référer à l’image de la requête Postman ajoutée ci-dessous :
- Une réponse réussie retourne les informations de l’utilisateur que vous avez créé. (voir l’image ci-dessous)
- Si vous recevez une erreur dans la réponse, vous pouvez consulter le tableau ci-dessous pour la description de l’erreur et les solutions possibles.
Réponses d’erreur :
Erreur | Description |
MISSING_AUTHORIZATION_HEADER |
Cette erreur survient lorsque vous n’envoyez pas d’en-tête Authorization dans la requête API ou si celui-ci a été supprimé par le serveur pour une raison quelconque. Exemple : |
INVALID_AUTHORIZATION_HEADER_TOKEN_TYPE | Cette erreur survient lorsque vous envoyez un en-tête Authorization mais dans un format invalide. Exemple : { "status": "error", "error": "INVALID_AUTHORIZATION_HEADER_TOKEN_TYPE", "error_description": "L’en-tête Authorization doit être de type Basic Authentication." } |
USER_DOES_NOT_EXIST |
Cette erreur survient lorsque le module ne trouve aucun compte correspondant au nom d’utilisateur envoyé dans la requête. Exemple : |
INVALID_API_KEY |
Cette erreur survient lorsque la clé API envoyée dans l’appel API ne correspond pas. Exemple : |
USER_NAME_MISSING |
Cette erreur survient lorsque le module ne parvient pas à trouver le nom d’utilisateur dans l’appel API. Exemple : |
INVALID_AUTHORIZATION_HEADER |
Cette erreur survient lorsque le module ne parvient pas à décoder correctement l’en-tête ou ne trouve pas le nom d’utilisateur et la clé API dans l’en-tête. Exemple : |
Article extrait de la Documentation Drupal.