OAuth-Client für PHP: Vollständige Anleitung zur Integration der Authentifizierung
\n\nOAuth (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\nIn 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\nInstallation des OAuth-Clients über Composer
\n\nUm zu beginnen, müssen Sie die Hauptbibliothek und die Provider (Adapter für bestimmte Dienste) installieren. Führen Sie im Terminal aus:
\n\ncomposer require league/oauth2-client\ncomposer require league/oauth2-google\ncomposer require league/oauth2-vk\n\nDie 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\ncomposer require guzzlehttp/guzzle\n\nGrundlegende Architektur von OAuth 2.0
\n\nOAuth 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
Beispiel: Anmeldung über Google
\n\nErstellen wir einen einfachen Handler für die Authentifizierung über Google. Es wird vorausgesetzt, dass Sie bereits eine client_id und ein client_secret haben.
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\nSchritt 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 Auch in der Bibliothek
Arbeiten mit Daten in Swift (iOS/macOS): Bibliotheken und Frameworks
chi Go: vollständige Anleitung mit Beispielen
GameplayKit für Swift: Komplettguide mit Beispielen
WebSocket-Bibliotheken für Node.js: ws, Socket.IO, uWS – ein vollständiger Überblick
Event Bus und das Observer-Muster in Go (Golang): Implementierung und Beispiele