Configurer l'authentification par jeton d'accès / OAuth
OAuth (Open Authorization) est une norme ouverte pour l'authentification et l'autorisation basée sur des jetons, pouvant être utilisée pour fournir une authentification unique (SSO). OAuth permet à des services tiers, comme Facebook, d'accéder à certaines informations du compte d'un utilisateur final sans exposer le mot de passe de ce dernier. Il agit comme un intermédiaire au nom de l'utilisateur final, fournissant au service un jeton d'accès qui autorise le partage d'informations spécifiques du compte.
Cette méthode d'authentification API Drupal utilise le protocole OAuth 2.0 pour obtenir un jeton d'accès sécurisé. Ce jeton est utilisé pour authentifier l'accès aux API de votre site Drupal. La méthode OAuth fournit un jeton d'accès fortement chiffré et sécurisé, garantissant une bonne protection de vos API Drupal. Elle est considérée comme l'une des façons les plus sûres d'empêcher un accès non autorisé à vos points d'entrée REST ou JSONAPI Drupal. Ce module est compatible avec Drupal 7, Drupal 8, Drupal 9, Drupal 10 et Drupal 11.
Vidéo d'installation :
Dans OAuth 2.0, les trois parties suivantes sont impliquées :
- L'utilisateur possède des données accessibles via l'API et souhaite autoriser l'application à y accéder.
- L'application souhaite accéder aux données via l'API au nom de l'utilisateur.
- Le point d'entrée API contrôle et permet l'accès aux données de l'utilisateur.
L'API accordera l'accès uniquement lorsqu'elle recevra un jeton d'accès valide de l'application. La manière dont l'application obtient ce jeton dépend du schéma OAuth utilisé.
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 dans la section Extension (/admin/modules) de votre site Drupal :
- JSON: API
- REST UI
- Services Web RESTful
- Sérialisation
Étapes pour configurer l'authentification API basée sur OAuth/jeton d'accès :
- Pour une meilleure compréhension, nous prendrons l'exemple d'ajout d'une authentification OAuth/jeton d'accès à l'API de récupération des informations utilisateur dans Drupal.
- Notez bien que l'API de récupération des informations utilisateur de Drupal est utilisée pour obtenir les informations d'un utilisateur.
Activez l'API et attribuez les méthodes et opérations comme suit :
- La première étape consiste à activer l'API et à définir les méthodes et opérations autorisées sur cette API. Cela peut être fait via le module REST UI ou simplement en modifiant la configuration.
- Pour activer l'API avec le module REST UI, cliquez sur le bouton Configurer du module REST UI (comme montré ci-dessous) :
- Dans notre exemple, nous voulons activer l'API /user/{user} présente dans la section Contenu. Activez cette API en utilisant l'option Activer à côté.
- Comme notre objectif est de récupérer les informations utilisateur, sélectionnez les configurations suivantes :
- Méthode : GET
- Format : json
- Fournisseur d'authentification : rest_api_authentication
- Cela 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 OAuth/jeton d'accès :
- À cette étape, nous allons configurer OAuth/jeton d'accès comme méthode d'authentification API.
Pour cela, rendez-vous dans 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 le bouton Enregistrer les paramètres.
- Sous le bouton Enregistrer, sélectionnez le bouton radio OAuth/jeton d'accès.
- Cliquez ensuite sur le bouton Générer un nouvel ID client & Secret.
- Conservez l'ID client et le Secret car ils seront utilisés plus tard pour authentifier l'API de récupération des informations utilisateur.
Attribuer aux rôles Drupal la permission de voir les informations utilisateur :
- Si nécessaire, vous pouvez aussi attribuer à des rôles Drupal non administrateurs la permission de voir les informations utilisateur. Pour cela, assignez les rôles Drupal à la permission Voir les informations utilisateur dans la section permissions (/admin/people/permissions) de votre site Drupal.
C’est tout !!!
Essayons maintenant de récupérer les informations utilisateur via un appel API utilisant OAuth/jeton d'accès pour l'authentification.
Exemples :
- Tout d'abord, nous devons effectuer un appel API pour obtenir un jeton d'accès. Nous l'utiliserons ensuite pour authentifier l'API Drupal afin d'obtenir les informations d'un utilisateur.
- Le module miniOrange API Authentication supporte 2 types de grant que vous pouvez utiliser pour obtenir un jeton d'accès :
Password Grant :
- Avec le Password grant, nous pouvons obtenir le jeton d'accès en faisant une requête POST contenant le nom d'utilisateur Drupal et le mot de passe ainsi que l'ID client émis par le module REST API Authentication.
Requête : POST <drupal_base_url>/rest_api/access_token
Corps :
grant_type = password
username = <nom_utilisateur_drupal>
password = <mot_de_passe_drupal>
client_id = <client_id>
Requête au format CURL :
curl --location --request POST '<votre_url_drupal>/rest_api/access_token' \
--header 'Accept: application/json' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=password' \
--data-urlencode 'client_id=<client_id_drupal>' \
--data-urlencode 'username=<nom_utilisateur_drupal>' \
--data-urlencode 'password=<mot_de_passe_drupal>'
- Vous pouvez aussi consulter l'image de la requête Postman ci-dessous :
Client Credentials Grant :
- Avec le Client Credentials grant, nous pouvons obtenir le jeton d'accès en faisant une requête POST contenant l'ID client et le Secret client émis par le module API Authentication ainsi que le nom d'utilisateur Drupal.
Requête : POST <drupal_base_url>/rest_api/access_token
Corps :
grant_type = client_credentials
client_id = <client_id>
client_secret = <client_secret>
username = <nom_utilisateur_drupal>
Requête CURL :
curl --location --request POST '<drupal_base_url>/rest_api/access_token' \
--header 'Accept: application/json' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=client_credentials' \
--data-urlencode 'client_id=<client_id>' \
--data-urlencode 'username=<nom_utilisateur_drupal>' \
--data-urlencode 'client_secret=<client_secret>'
- Vous pouvez aussi consulter l'image de la requête Postman pour obtenir un jeton d'accès depuis Drupal en utilisant le Client Credentials grant.
- Une réponse réussie retourne le jeton d'accès ainsi que la durée de validité du jeton et son type (voir image ci-dessous).
Réponse d'erreur :
Erreur | Description |
INVALID_CREDENTIALS |
Cette erreur apparaît lorsque le nom d'utilisateur ou le mot de passe est incorrect. Exemple : |
INVALID_CLIENT_ID |
Cette erreur survient lorsque vous envoyez un ID client incorrect. Exemple : |
INVALID_CLIENT_SECRET |
Cette erreur survient lorsque vous envoyez un Secret client incorrect. Exemple : |
MISSING_USERNAME |
Cette erreur survient lorsque vous avez omis un paramètre à envoyer dans la requête. Exemple : |
Article tiré de la Documentation Drupal.