Authentification JWT
Le module Drupal API Authentication fonctionne en envoyant un jeton JWT avec vos requêtes API pour l’authentification. Ce module utilise JSON Web Token (JWT), une norme ouverte pour représenter de manière sécurisée l’identité utilisateur lors d’interactions entre deux parties.
Dans cette étape, un nom d’utilisateur et un mot de passe de votre site Drupal sont utilisés pour obtenir d’abord un jeton JWT. Une fois le nom d’utilisateur et le mot de passe vérifiés, le module Drupal REST API Authentication crée un JSON Web Token signé. Ensuite, l’API renvoie ce jeton à l’application cliente.
Une fois que vous avez reçu le jeton JWT, vous pouvez utiliser ce jeton pour effectuer des opérations dans Drupal jusqu’à ce que le jeton expire. Le module Drupal REST API Authentication accordera l’accès uniquement lorsqu’il reçoit un JWT valide de l’application.
Le JWT peut être signé et validé avec deux algorithmes : HSA et RSA.
Voyons comment utiliser un jeton JWT pour l’authentification API dans Drupal.
Vidéo d’installation :
Prérequis : téléchargement et installation :
- Téléchargez et installez le module Drupal REST & JSON API Authentication.
- REST UI : ce module fournit une interface utilisateur pour configurer le module REST.
- Activez les modules Web Services suivants depuis la section Étendre (/admin/modules) de votre site Drupal :
- REST UI
- RESTful Web Services
- Serialization
Étapes pour configurer l’authentification API basée sur JWT :
- Pour mieux comprendre, nous prendrons l’exemple d’ajout d’une authentification basée sur JWT pour créer une page basique dans Drupal via l’API /node.
Activez l’API et attribuez les méthodes et opérations suivantes :
- La première étape consiste à activer l’API et attribuer les méthodes et opérations autorisées pour cette API. Cela peut être fait via le module REST UI ou en modifiant directement la configuration.
- Pour activer l’API via le module REST UI, cliquez sur le bouton Configurer du module REST UI (voir ci-dessous).
- Dans notre exemple, nous voulons activer l’API /node sous la section contenu. Activez cette API en utilisant l’option Activer devant elle.
- Maintenant, comme notre but est de créer une page basique sur 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. Cliquez sur le bouton Enregistrer la configuration pour continuer.
Configurer l’authentification API basée sur JWT :
-
Dans cette étape, nous allons configurer JWT comme méthode d’authentification API. Pour cela, rendez-vous dans l’onglet API Authentication du module REST API Authentication (/admin/config/people/rest_api_authentication/auth_settings).
- Cochez la case Enable Authentication et cliquez sur Enregistrer les paramètres.
- Sous le bouton Enregistrer les paramètres, sélectionnez le bouton radio JWT.
-
Si vous souhaitez utiliser un jeton JWT créé en externe pour l’authentification, vous pouvez le configurer via les options ci-dessous :
- Dans le champ texte Username Attribute, saisissez le nom de l’attribut dans lequel votre nom d’utilisateur sera reçu.
- Si vous souhaitez utiliser un jeton JWT externe, vous pouvez également fournir l’URI JWKS pour valider ce jeton JWT dans Drupal.
Attribuer des permissions aux rôles Drupal pour créer une page :
-
Si nécessaire, vous pouvez également accorder aux rôles Drupal non administrateurs la permission de créer une page basique. Pour cela, attribuez la permission Basic page: Create new content aux rôles Drupal depuis la section permissions (/admin/people/permissions) de votre site Drupal.
Voilà !
Essayons maintenant de créer une page basique via un appel API utilisant JWT pour l’authentification.
Exemples :
-
Tout d’abord, il faut effectuer un appel API pour obtenir un JWT. Nous utiliserons ensuite ce jeton pour authentifier l’API Drupal afin de créer une page basique.
-
Le JWT s’obtient en faisant une requête POST contenant le nom d’utilisateur Drupal et le mot de passe. Le nom d’utilisateur et le mot de passe doivent être envoyés en base64. Vous pouvez vous référer au format de requête ci-dessous.
Requête : POST <votre_url_de_base_drupal>/rest_api/id_token
En-tête : Authorization: Basic base64encodé <nom_utilisateur:mot_de_passe>
Accept: application/jsonFormat de la requête CURL :
curl --location --request POST ' <votre_url_de_base_drupal>/rest_api/id_token' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic base64encodé <nom_utilisateur:mot_de_passe>'
-
Vous pouvez aussi vous référer à l’image de la requête Postman pour obtenir le JWT depuis Drupal.
Requête :
-
Une réponse réussie retourne le JWT avec sa date d’expiration (voir l’image ci-dessous).
-
En cas d’erreur dans la réponse, vous pouvez vous référer au tableau ci-dessous pour la description de l’erreur et les solutions possibles.
Erreur | Description |
INVALID_CREDENTIALS |
Vous recevrez cette erreur lorsque le nom d’utilisateur ou le mot de passe est incorrect. Exemple : |
Authentifier les APIs REST Drupal avec le JWT reçu :
- Pour authentifier avec JWT, ajoutez simplement le JWT reçu comme token Bearer dans l’en-tête Authorization.
Requête : POST <url_de_base_drupal>/node?_format=json
En-tête : Authorization: Bearer JWT_reçu
Accept: application/json
Corps :
{
"type":[
{"target_id":"page"}
],
"title":[
{"value":"Drupal Rest API Authentication"}
],
"body":[
{"value":"Page créée avec l’authentification JWT."}
]
}Format de la requête CURL :
curl --location --request POST ‘<url_de_base_drupal>/node?_format=json’\
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <JWT_reçu>' \
--data-raw '{
"type":[
{"target_id":"page"}
],
"title":[
{"value":"Drupal Rest API Authentication"}
],
"body":[
{"value":"Page créée avec l’authentification JWT."}
]
}'
Exemple de requête pour créer une page avec authentification basée sur JWT :
- Vous pouvez également vous référer à la requête Postman correspondante :
- Une réponse réussie ressemblera à ceci :
- Vous pouvez vérifier la page créée dans l’onglet contenu de Drupal.
-
Réponses d’erreur et solutions possibles :
Erreur | Description |
MISSING_AUTHORIZATION_HEADER |
Vous obtiendrez cette erreur si vous n’envoyez pas d’en-tête Authorization dans la requête API ou si celui-ci a été supprimé par votre serveur pour une raison quelconque. Exemple : |
INVALID_AUTHORIZATION_HEADER_TOKEN_TYPE |
Vous obtiendrez cette erreur lorsque vous envoyez l’en-tête Authorization mais que le type de jeton n’est pas Bearer. Exemple : |
TOKEN_EXPIRED |
Vous obtiendrez cette erreur lorsque vous envoyez l’en-tête Authorization mais que le jeton d’accès est expiré. Exemple : |
USER_INFORMATION_NOT_FOUND |
Vous obtiendrez cette erreur lors de la tentative de récupération des informations utilisateur. Exemple : |
INVALID_SIGNATURE |
Vous obtiendrez cette erreur lorsque la signature du jeton n’est pas valide. Exemple : |
Article extrait de la documentation Drupal.