Client OAuth pour PHP : authentification via les réseaux sociaux et API

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Client OAuth pour PHP : guide complet d'intégration de l'authentification

\n\n

OAuth (Open Authorization) est un protocole d'autorisation ouvert qui permet d'accorder à un tiers un accès limité aux ressources d'un utilisateur sans transmettre son identifiant et son mot de passe. Dans le monde PHP, il existe plusieurs bibliothèques pour implémenter OAuth 2.0, mais l'une des plus populaires et maintenues est League\\OAuth2-Client (The PHP League). Cette bibliothèque offre un moyen flexible et sécurisé d'intégrer la connexion via Google, Facebook, GitHub, VK (VKontakte), Yandex et bien d'autres services.

\n\n

Dans cet article, nous allons détailler l'installation, la configuration et l'utilisation du client OAuth pour PHP en prenant l'exemple de l'authentification via Google et VK. Vous apprendrez comment obtenir un access token, un refresh token et les données du profil utilisateur.

\n\n

Installation du client OAuth via Composer

\n\n

Pour commencer, il est nécessaire d'installer la bibliothèque principale et les providers (adaptateurs pour des services spécifiques). Exécutez dans le terminal :

\n\n
composer require league/oauth2-client\ncomposer require league/oauth2-google\ncomposer require league/oauth2-vk
\n\n

La bibliothèque prend en charge PSR-7 (messages HTTP) et PSR-18 (client HTTP), il est donc également recommandé d'installer Guzzle ou tout autre client HTTP compatible :

\n\n
composer require guzzlehttp/guzzle
\n\n

Architecture de base d'OAuth 2.0

\n\n

OAuth 2.0 en PHP fonctionne selon le schéma suivant :

\n
    \n
  • Client ID et Client Secret — obtenus lors de l'enregistrement de l'application dans le service (Google Cloud Console, VK Developers, etc.).
  • \n
  • Redirect URI — l'URL sur votre site vers laquelle le service redirigera l'utilisateur après l'autorisation.
  • \n
  • Authorization Code — un code temporaire qui est échangé contre un access token.
  • \n
  • Access Token — la clé pour accéder à l'API de l'utilisateur.
  • \n
  • Refresh Token — permet de renouveler l'access token sans nouvelle autorisation.
  • \n
\n\n

Exemple : connexion via Google

\n\n

Créons un gestionnaire simple pour l'authentification via Google. On suppose que vous avez déjà un client_id et un client_secret.

\n\n

Étape 1. Redirection de l'utilisateur vers la page d'autorisation Google

\n\n
<?php\nrequire 'vendor/autoload.php';\n\n$provider = new \\League\\OAuth2\\Client\\Provider\\Google([\n    'clientId'     => 'VOTRE_CLIENT_ID',\n    'clientSecret' => 'VOTRE_CLIENT_SECRET',\n    'redirectUri'  => 'https://votre-site.fr/callback.php',\n]);\n\n// Générer l'URL d'autorisation\n$authUrl = $provider->getAuthorizationUrl([\n    'scope' => ['email', 'profile'], // permissions demandées\n]);\n\n// Enregistrer l'état dans la session pour la protection CSRF\n$_SESSION['oauth2state'] = $provider->getState();\n\nheader('Location: ' . $authUrl);\nexit;
\n\n

Étape 2. Traitement du callback (callback.php)

\n\n
<?php\nsession_start();\nrequire 'vendor/autoload.php';\n\n$provider = new \\League\\OAuth2\\Client\\Provider\\Google([\n    'clientId'     => 'VOTRE_CLIENT_ID',\n    'clientSecret' => 'VOTRE_CLIENT_SECRET',\n    'redirectUri'  => 'https://votre-site.fr/callback.php',\n]);\n\n// Vérifier l'état pour prévenir les attaques CSRF\nif (empty($_GET['state']) || ($_GET['state'] !== $_SESSION['oauth2state'])) {\n    unset($_SESSION['oauth2state']);\n    exit('État invalide');\n}\n\ntry {\n    // Échanger le code d'autorisation contre un access token\n    $accessToken = $provider->getAccessToken('authorization_code', [\n        'code' => $_GET['code']\n    ]);\n\n    // Obtenir les données du profil utilisateur\n    $resourceOwner = $provider->getResourceOwner($accessToken);\n    $user = $resourceOwner->toArray();\n\n    echo "Bonjour, " . htmlspecialchars($user['name']) . " !";\n    echo "Email : " . htmlspecialchars($user['email']);\n    // Enregistrer le token dans la base de données pour                    

Recommendations