Par Evan Sims
Ce guide explique comment intégrer Auth0 à une application PHP à l’aide du SDK PHP d’Auth0. Nous vous recommandons d’ouvrir une session pour suivre ce guide de démarrage rapide avec des exemples configurés pour votre compte.
Obtenez les clés de votre application
Lorsque vous vous inscrivez à Auth0, une nouvelle application est créée pour vous, à moins que vous n’en créiez une nouvelle. Vous aurez besoin de certains renseignements sur cette application pour communiquer avec Auth0. Vous pouvez obtenir ces renseignements dans la section Paramètres de l’application du Auth0 Dashboard.
Vous avez besoin des renseignements suivants :
- Domaine
- ID client
- Secret client
Si vous téléchargez l’exemple en haut de cette page, ces renseignements sont déjà remplis pour vous.
Une URL de rappel est une URL de votre application vers laquelle Auth0 redirige l’utilisateur après son authentification. L’URL de rappel de votre application doit être ajoutée au champ Allowed Callback URLs dans les paramètres de l’application. Si ce champ n’est pas configuré, les utilisateurs ne pourront pas se connecter à l’application et recevront une erreur.
Si vous suivez l’exemple de projet que vous avez téléchargé en haut de cette page, l’URL de rappel que vous devez ajouter au champ Allowed Callback URLs est http://127.0.0.1:3000/.
Une URL de déconnexion est une URL de votre application vers laquelle Auth0 peut rediriger l’utilisateur après sa déconnexion du serveur d’autorisation. Cette URL est indiquée dans le paramètre de requête returnTo. L’URL de déconnexion de votre application doit être ajoutée au champ Allowed Logout URLs dans les paramètres de l’application. Si ce champ n’est pas défini, les utilisateurs ne pourront pas se déconnecter de l’application et recevront une erreur.
Si vous suivez l’exemple de projet téléchargé en haut de cette page, l’URL de déconnexion à ajouter au champ Allowed Logout URLs est http://127.0.0.1:3000.
Intégrez votre application PHP
Créons un exemple d’application qui authentifie un utilisateur dans une application PHP. Nous allons adopter ici une approche simple, adaptée au format de cette documentation. Cela dit, consultez aussi l’application Quickstart sur GitHub qui l’accompagne pour un exemple plus complet.
Installation du client HTTP et des fabriques de messages
Le SDK PHP d’Auth0 prend en charge de nombreuses normes PHP-FIG, qui offrent des options d’interopérabilité avec votre architecture. Deux d’entre elles sont particulièrement importantes : PSR-17 et PSR-18. Ces normes vous permettent d’intégrer les composants réseau de votre choix pour gérer les messages et les requêtes HTTP. Vous devrez installer des bibliothèques compatibles dans votre projet pour que le SDK puisse les utiliser.
La bibliothèque réseau la plus répandue pour PHP est Guzzle, bien qu’il existe plusieurs autres options dans la communauté PHP. Utilisons Guzzle pour cet exemple d’application. Encore une fois, à partir du répertoire de votre projet, exécutez la commande shell suivante :
composer require guzzlehttp/guzzle guzzlehttp/psr7 http-interop/http-factory-guzzle
Le SDK PHP d’Auth0 nécessite Composer, un outil de gestion des dépendances pour PHP. Composer vous permet de déclarer les bibliothèques dont votre projet a besoin et les installe pour vous. Assurez-vous que Composer est installé et accessible depuis votre terminal avant de poursuivre.
Exécutez la commande shell suivante dans le répertoire de votre projet pour installer le SDK PHP d’Auth0 :
composer require auth0/auth0-php
Cela créera un dossier vendor dans votre projet et téléchargera toutes les dépendances nécessaires pour utiliser le SDK PHP d’Auth0. Cela créera également un fichier vendor/autoload.php, utilisé dans l’exemple pour charger toutes les classes nécessaires au bon fonctionnement de votre application. Il est important d’inclure ce fichier d’autoload dans votre projet pour que le SDK fonctionne.
Pour commencer, créons un fichier .env à la racine de votre projet pour y stocker la configuration de l’application d’exemple et définir les variables d’environnement :
Comme PHP ne peut pas lire notre fichier .env à lui seul, nous devons installer une bibliothèque pour nous aider. Bien que nous utilisions une bibliothèque précise pour les besoins de notre application d’exemple, dans une application réelle, n’importe quel chargeur dotenv fera l’affaire. À partir du répertoire de votre projet, exécutez la commande shell suivante pour installer la bibliothèque :
composer require vlucas/phpdotenv
Ensuite, créons le fichier source PHP que nous utiliserons pour ces exemples de code, index.php, puis configurons une instance du SDK PHP d’Auth0 pour notre application exemple :
<?php
// Importer le chargeur automatique Composer pour rendre les classes du SDK accessibles :
require 'vendor/autoload.php';
// Charger nos variables d'environnement depuis le fichier .env :
(Dotenv\Dotenv::createImmutable(__DIR__))->load();
// Instancier maintenant la classe Auth0 avec notre configuration :
$auth0 = new \Auth0\SDK\Auth0([
'domain' => $_ENV['AUTH0_DOMAIN'],
'clientId' => $_ENV['AUTH0_CLIENT_ID'],
'clientSecret' => $_ENV['AUTH0_CLIENT_SECRET'],
'cookieSecret' => $_ENV['AUTH0_COOKIE_SECRET']
]);
Configuration des routes de votre application
Les applications PHP modernes utilisent un mécanisme de routage pour acheminer les requêtes HTTP entrantes vers le code qui les traite, afin de déterminer ce qui doit se produire lorsque nos utilisateurs visitent une “page” précise de notre application. Il n’existe pas une seule bonne façon d’implémenter le routage dans votre application, et vous avez le choix parmi de nombreuses bibliothèques pour le faire. Pour notre application d’exemple, nous utiliserons une bibliothèque en particulier, mais dans une application réelle, n’hésitez pas à choisir celle qui vous convient.
Depuis le répertoire de notre projet, exécutons la commande shell suivante pour installer la bibliothèque de routage :
composer require steampixel/simple-php-router
Ensuite, rouvrons notre index.php et donnons vie à notre application. Pour commencer, importez la bibliothèque de routage et définissez les URL complètes des routes de notre application d’exemple sous forme de constantes nommées, par souci de commodité, puisque nous devrons nous y référer à quelques endroits dans l’application :
// 👆 Nous continuons à partir des étapes précédentes. Ajoutez ceci à votre fichier index.php.
// Importez notre bibliothèque de routage :
use Steampixel\Route;
// Définissez les constantes de route :
define('ROUTE_URL_INDEX', rtrim($_ENV['AUTH0_BASE_URL'], '/'));
define('ROUTE_URL_LOGIN', ROUTE_URL_INDEX . '/login');
define('ROUTE_URL_CALLBACK', ROUTE_URL_INDEX . '/callback');
define('ROUTE_URL_LOGOUT', ROUTE_URL_INDEX . '/logout');
Nous pouvons maintenant passer à l’ajout de la logique de gestion des routes de notre application, ainsi qu’aux intégrations du SDK :
Vérifier la présence d’une session
Le SDK PHP d’Auth0 fournit une méthode pratique, getCredentials(), pour vérifier si notre utilisateur s’est authentifié et récupérer son profil. Installons-la sur notre route d’index afin d’afficher le profil de l’utilisateur s’il est connecté, ou d’indiquer qu’il doit se connecter.
// 👆 Nous continuons à partir des étapes précédentes. Ajoutez ceci à votre fichier index.php.
Route::add('/', function() use ($auth0) {
$session = $auth0->getCredentials();
if ($session === null) {
// L'utilisateur n'est pas connecté.
echo '<p>Please <a href="/docs/login">log in</a>.</p>';
return;
}
// L'utilisateur est connecté.
echo '<pre>';
print_r($session->user);
echo '</pre>';
echo '<p>You can now <a href="/docs/logout">log out</a>.</p>';
});
Nous pouvons accéder à toutes les propriétés du profil de notre utilisateur à partir de la propriété de réponse user, qui est un tableau. Par exemple, nous pouvons récupérer le pseudonyme de l’utilisateur avec $session->user<a href="https://auth0.com/docs/users/user-profile-structure" target="_blank" rel="noreferrer">nickname, ou son adresse de courriel à partir de $session->useremail. La structure correspond à un profil d’utilisateur normalisé, sur lequel vous pouvez en apprendre davantage ici.
Il est important de noter que le contenu du profil d’utilisateur varie selon le ou les fournisseurs sociaux que vous utilisez; vous ne devriez donc jamais présumer qu’une valeur donnée sera toujours présente dans la logique de votre application. Utilisez des constructions du langage PHP comme isset ou l’opérateur de coalescence des valeurs nulles pour gérer adéquatement la présence d’une valeur, ou son absence, par exemple :
// ✋ Nous n'avons pas besoin d'inclure ceci dans notre exemple d'application, c'est juste un exemple.
$name = $session->user['name'] ?? $session->user['nickname'] ?? $session->user['email'] ?? 'Unknown';
Créons maintenant notre route /login, qui utilisera la méthode login() du SDK PHP d’Auth0 pour configurer la session de l’utilisateur et renvoyer une URL personnalisée vers la page Universal Login d’Auth0 afin que cet utilisateur puisse se connecter.
// 👆 Nous continuons à partir des étapes précédentes. Ajoutez ceci à votre fichier index.php.
Route::add('/login', function() use ($auth0) {
// Il est recommandé de réinitialiser les sessions utilisateur à chaque connexion pour éviter les erreurs d'« état invalide », en cas de problèmes réseau ou d'autres incidents qui interrompraient un processus de connexion en cours :
$auth0->clear();
// Enfin, configurez la session de l'application locale et redirigez l'utilisateur vers la page Universal Login d'Auth0 pour l'authentification.
header("Location: " . $auth0->login(ROUTE_URL_CALLBACK));
exit;
});
Gérer le rappel d’authentification
Une fois que nos utilisateurs se sont authentifiés au moyen de la page Universal Login d’Auth0, ils sont redirigés vers la route de rappel de notre application exemple, /callback, que nous allons traiter à cette étape.
Quand Auth0 nous renvoie les utilisateurs, quelques paramètres essentiels sont inclus dans la chaîne de requête de la requête HTTP. La méthode exchange() du SDK PHP d’Auth0 s’en charge, donc il est simple de finaliser notre flux d’authentification :
// 👆 Nous continuons à partir des étapes précédentes. Ajoutez ceci à votre fichier index.php.
Route::add('/callback', function() use ($auth0) {
// Demander au SDK de terminer le flux d'authentification :
$auth0->exchange(ROUTE_URL_CALLBACK);
// Enfin, rediriger l'utilisateur final vers la route d'index /, pour afficher son profil utilisateur :
header("Location: " . ROUTE_URL_INDEX);
exit;
});
Enfin, gérons correctement la déconnexion de nos utilisateurs. La méthode logout() du SDK PHP d’Auth0 s’occupe d’effacer les témoins de session de notre application d’exemple, de rediriger l’utilisateur vers le point de terminaison /logout d’Auth0 (ce qui met fin à la session Auth0 ainsi qu’à toute session ouverte chez le fournisseur d’identité), puis de le renvoyer vers la route d’index /.
// 👆 Nous continuons à partir des étapes précédentes. Ajoutez ceci à votre fichier index.php.
Route::add('/logout', function() use ($auth0) {
// Effacez la session locale de l'utilisateur dans notre application, puis redirigez-le vers le point de terminaison de déconnexion Auth0 pour effacer sa session Auth0.
header("Location: " . $auth0->logout(ROUTE_URL_INDEX));
exit;
});
Lancez votre application !
Enfin, nous devons configurer notre middleware de routage pour qu’il achemine réellement les requêtes :
// 👆 Nous continuons à partir des étapes précédentes. Ajoutez ceci à votre fichier index.php.
// Ceci indique à notre routeur que nous avons terminé de configurer nos routes et que nous sommes prêts à acheminer les requêtes HTTP entrantes :
Route::run('/');
C’est tout ! Vous êtes prêt à exécuter votre nouvelle application. Encore une fois, à partir du répertoire de votre projet, exécutez la commande shell suivante :
php -S 127.0.0.1:3000 index.php
Ouvrez votre navigateur à l’adresse http://127.0.0.1:3000 et essayez l’application.