OAuth2 ist ein weit verbreitetes offenes Standardprotokoll, das zur Autorisierung des Zugriffs auf Benutzerressourcen verwendet wird, ohne Benutzernamen und Passwörter direkt an Drittanwendungen wie soziale Netzwerke wie Google, Facebook und Twitter zu übertragen.
In PHP können Sie vorgefertigte OAuth2-Bibliotheken verwenden, um den OAuth2-Fluss einfach zu implementieren, oder Sie können Ihre eigene Bibliothek erstellen, um ihn zu implementieren.
In diesem Artikel konzentrieren wir uns auf die Verwendung der vorgefertigten OAuth2-Bibliothek und darauf, wie Sie das OAuth2-Protokoll verwenden, um Benutzerautorisierungen zu erhalten und auf ihre Ressourcen zuzugreifen.
Zuerst müssen wir die verfügbare OAuth2-Bibliothek installieren. Derzeit stehen mehrere verschiedene OAuth2-Bibliotheken für die PHP-Entwicklung zur Verfügung, darunter unter anderem php-oauth2-client, thephpleague/oauth2-client und bshaffer/oauth2-server-php. In diesem Artikel verwenden wir phpleague/oauth2-client als unsere OAuth2-Bibliothek.
Um diese Bibliothek zu installieren, können Sie Composer verwenden. Führen Sie einfach den folgenden Befehl im Terminal aus:
composer require league/oauth2-client
Sobald wir die OAuth2-Bibliothek installiert haben, können wir jetzt ein OAuth2-Clientobjekt erstellen. Dieser Client kommuniziert mit dem Dienstanbieter gemäß dem OAuth2-Protokoll und behält den Sitzungsstatus zwischen uns und dem Dienstanbieter bei.
In diesem Beispiel verwenden wir GitHub als OAuth2-Anbieter. Um ein Client-Objekt zu erstellen, verwenden Sie den folgenden Code:
$clientId = 'your_client_id'; // Your GitHub Client ID $clientSecret = 'your_client_secret'; // Your GitHub Client Secret $redirectUri = 'http://example.com/oauth2callback'; // Your redirect URI $provider = new LeagueOAuth2ClientProviderGithub([ 'clientId' => $clientId, 'clientSecret' => $clientSecret, 'redirectUri' => $redirectUri, ]);
Der obige Code erstellt ein OAuth2-Client-Objekt mit dem Namen $provider, das für den Zugriff auf den OAuth2-Anbieter auf GitHub verwendet wird. Darunter müssen wir die Client-ID, das Client-Geheimnis und den Rückruf-URI angeben, die uns von GitHub zugewiesen wurden.
In OAuth2 wird die Autorisierungs-URL verwendet, um den Benutzer durch den OAuth2-Autorisierungsprozess zu führen. Wir müssen Benutzer zur Autorisierungs-URL umleiten, damit sie unsere Anwendung autorisieren können, bevor sie auf die GitHub-Ressourcen zugreifen, die unsere Anwendung benötigt.
Um die Autorisierungs-URL zu erhalten, verwenden Sie den folgenden Code:
$authorizationUrl = $provider->getAuthorizationUrl();
Der obige Code gibt die Autorisierungs-URL zurück, zu der wir den Benutzer umleiten müssen.
header('Location: ' . $authorizationUrl); exit;
Sobald der Benutzer die OAuth2-Autorisierung auf GitHub erfolgreich durchgeführt hat, wird er zurück zur Rückruf-URL weitergeleitet, die von unserer Anwendung bereitgestellt wird. An diesem Punkt müssen wir ein Zugriffstoken erhalten, um anschließend auf die GitHub-Ressourcen zugreifen zu können, die eine Autorisierung erfordern.
Als nächstes können wir den folgenden Code verwenden, um das Zugriffstoken abzurufen:
$accessToken = $provider->getAccessToken('authorization_code', [ 'code' => $_GET['code'] ]);
Der obige Code verwendet den Autorisierungscode, um das Zugriffstoken anzufordern und das $accessToken-Objekt zurückzugeben. Dieses $accessToken-Objekt enthält das Zugriffstoken und die zugehörigen Eigenschaften, wie Ablaufzeit und Aktualisierungstoken usw.
Da wir nun das Zugriffstoken erhalten haben, können wir damit auf GitHub-Ressourcen zugreifen, für die eine Autorisierung erforderlich ist, z. B. um Benutzerinformationen abzurufen oder deren Repository-Liste zu lesen.
Verwenden Sie den folgenden Code, um Benutzerinformationen abzurufen:
$user = $provider->getResourceOwner($accessToken); echo 'Hello, ' . $user->getName();
Der obige Code verwendet das Zugriffstoken, um die Ressourcenbesitzer-API auf GitHub aufzurufen und das $user-Objekt zurückzugeben.
Bitte beachten Sie, dass das $user-Objekt im obigen Code den Namen des Benutzers und andere zugehörige Eigenschaften zurückgibt, die wir verwenden können, um Informationen über den Benutzer und andere GitHub-Ressourcen abzurufen.
Ein Zugriffstoken kann ablaufen oder ungültig werden. Wir müssen seinen Status zur Laufzeit überprüfen und das Token bei Bedarf erneut aktualisieren.
Verwenden Sie den folgenden Code, um das Zugriffstoken zu überprüfen und zu aktualisieren:
if ($accessToken->hasExpired()) { $newAccessToken = $provider->getAccessToken('refresh_token', [ 'refresh_token' => $accessToken->getRefreshToken() ]); } // Use $newAccessToken to access protected resources
Der obige Code prüft, ob das Zugriffstoken abgelaufen ist, und verwendet das Attribut „refresh_token“, um ein neues $accessToken-Objekt anzufordern, das das aktualisierte Zugriffstoken und andere verwandte Eigenschaften enthält .
An diesem Punkt haben wir gelernt, wie man die Bibliothek phpleague/oauth2-client verwendet, um den OAuth2-Prozess zu implementieren. Wir können damit nun auf verschiedene OAuth2-Anbieter wie unter anderem Google, Facebook, Twitter und GitHub zugreifen.
Zusammenfassung
In diesem Artikel haben wir gelernt, wie man mit der OAuth2-Bibliothek einen OAuth2-Client erstellt und mit dem Client eine Autorisierung erhält und auf geschützte Ressourcen zugreift. Wir haben auch gelernt, wie man Zugriffstoken überprüft und aktualisiert, um sicherzustellen, dass wir immer Zugriff auf die benötigten Ressourcen haben.
Bitte beachten Sie, dass das OAuth2-Protokoll komplexe Autorisierungsprozesse und Implementierungsdetails aufweist, sodass bei der Entwicklung von OAuth2-Clients Sorgfalt und Vorsicht geboten sind. Durch die Verwendung handelsüblicher OAuth2-Bibliotheken können wir diesen Prozess jedoch relativ einfach und unkompliziert gestalten.
Das obige ist der detaillierte Inhalt vonWie verwende ich OAuth2 mit PHP?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!