OAuth-Client für PHP: Authentifizierung über soziale Netzwerke und API

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

OAuth-Client für PHP: Vollständige Anleitung zur Integration der Authentifizierung

\n\n

OAuth (Open Authorization) ist ein offenes Autorisierungsprotokoll, das es Drittanbietern ermöglicht, eingeschränkten Zugriff auf Benutzerressourcen zu erhalten, ohne Login und Passwort weiterzugeben. In der PHP-Welt gibt es mehrere Bibliotheken zur Implementierung von OAuth 2.0, aber eine der beliebtesten und am besten gewarteten ist League\\OAuth2-Client (The PHP League). Diese Bibliothek bietet eine flexible und sichere Möglichkeit, die Anmeldung über Google, Facebook, GitHub, VK (VKontakte), Yandex und viele andere Dienste zu integrieren.

\n\n

In diesem Artikel werden wir die Installation, Konfiguration und Verwendung des OAuth-Clients für PHP am Beispiel der Authentifizierung über Google und VK im Detail besprechen. Sie erfahren, wie Sie Access Token, Refresh Token und Benutzerprofildaten erhalten.

\n\n

Installation des OAuth-Clients über Composer

\n\n

Um zu beginnen, müssen Sie die Hauptbibliothek und die Provider (Adapter für bestimmte Dienste) installieren. Führen Sie im Terminal aus:

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

Die Bibliothek unterstützt PSR-7 (HTTP-Nachrichten) und PSR-18 (HTTP-Client), daher wird empfohlen, auch Guzzle oder einen anderen kompatiblen HTTP-Client zu installieren:

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

Grundlegende Architektur von OAuth 2.0

\n\n

OAuth 2.0 in PHP funktioniert nach folgendem Schema:

\n
    \n
  • Client ID und Client Secret — erhalten Sie bei der Registrierung Ihrer Anwendung im Dienst (Google Cloud Console, VK Developers usw.).
  • \n
  • Redirect URI — die URL auf Ihrer Website, an die der Dienst den Benutzer nach der Autorisierung weiterleitet.
  • \n
  • Authorization Code — ein temporärer Code, der gegen einen Access Token eingetauscht wird.
  • \n
  • Access Token — der Schlüssel für den Zugriff auf die API des Benutzers.
  • \n
  • Refresh Token — ermöglicht die Aktualisierung des Access Tokens ohne erneute Autorisierung.
  • \n
\n\n

Beispiel: Anmeldung über Google

\n\n

Erstellen wir einen einfachen Handler für die Authentifizierung über Google. Es wird vorausgesetzt, dass Sie bereits eine client_id und ein client_secret haben.

\n\n

Schritt 1. Weiterleitung des Benutzers zur Google-Autorisierungsseite

\n\n
<?php\nrequire 'vendor/autoload.php';\n\n$provider = new \\League\\OAuth2\\Client\\Provider\\Google([\n    'clientId'     => 'IHRE_CLIENT_ID',\n    'clientSecret' => 'IHR_CLIENT_SECRET',\n    'redirectUri'  => 'https://ihre-website.de/callback.php',\n]);\n\n// URL für die Autorisierung generieren\n$authUrl = $provider->getAuthorizationUrl([\n    'scope' => ['email', 'profile'], // angeforderte Berechtigungen\n]);\n\n// State in der Session speichern, um CSRF zu verhindern\n$_SESSION['oauth2state'] = $provider->getState();\n\nheader('Location: ' . $authUrl);\nexit;
\n\n

Schritt 2. Verarbeitung des Callbacks (callback.php)

\n\n
<?php\nsession_start();\nrequire 'vendor/autoload.php';\n\n$provider = new \\League\\OAuth2\\Client\\Provider\\Google([\n    'clientId'     => 'IHRE_CLIENT_ID',\n    'clientSecret' => 'IHR_CLIENT_SECRET',\n    'redirectUri'  => 'https://ihre-website.de/callback.php',\n]);\n\n// State überprüfen, um CSRF-Angriffe zu verhindern\nif (empty($_GET['state']) || ($_GET['state'] !== $_SESSION['oauth2state'])) {\n    unset($_SESSION['oauth2state']);\n    exit('Ungültiger State');\n}\n\ntry {\n    // Authorization Code gegen Access Token eintauschen\n    $accessToken = $provider->getAccessToken('authorization_code', [\n        'code' => $_GET['code']\n    ]);\n\n    // Benutzerprofildaten abrufen\n    $resourceOwner = $provider->getResourceOwner($accessToken);\n    $user = $resourceOwner->toArray();\n\n    echo "Hallo, " . htmlspecialchars($user['name']) . "!";\n    echo "E-Mail: " . htmlspecialchars($user['email']);\n    // Token in der Datenbank speichern für                    

Empfehlungen