In aktuellen Mobil- und Webanwendungen sind APIs ein wesentlicher Bestandteil. Sie stellen interaktive Schnittstellen für Benutzer und Anwendungen bereit. Allerdings stellen diese APIs auch Risiken für böswillige Benutzer und Hacker dar und können zum Verlust sensibler Daten führen. Daher müssen APIs gesichert werden, um unbefugten Zugriff zu verhindern. OAuth 2.0 ist eine bewährte Möglichkeit, Ihnen den Zugriff auf eine API über ein Token zu ermöglichen und gleichzeitig sicherzustellen, dass Sie dazu berechtigt sind.
In diesem Artikel untersuchen wir, wie man OAuth 2.0 in PHP integriert, um APIs zu sichern.
Was ist OAuth 2.0?
OAuth 2.0 ist ein offener Standard, der es Benutzern ermöglicht, Dritten den Zugriff auf ihre Ressourcen (z. B. Fotos, Dokumente, Kontakte usw.) zu gestatten. Genauer gesagt verwendet OAuth 2.0 Autorisierungstoken, um im Namen von Benutzern auf ihre Ressourcen zuzugreifen. Ein Zugriffstoken ist ein von einem Autorisierungsserver ausgestellter Berechtigungsnachweis, der dem Aufrufer beim Zugriff auf eine Ressource bereitgestellt wird. Anrufer können dieses Token bei jeder Anfrage verwenden, um anzugeben, dass sie zum Zugriff auf die Ressource berechtigt sind.
OAuth 2.0 in PHP integrieren
In PHP stehen viele OAuth 2.0-Bibliotheken zur Auswahl. In diesem Artikel stellen wir den Prozess der Implementierung von OAuth 2.0 mithilfe des Pakets phpleague/oauth2-client vor.
Schritt 1: Installieren Sie das Paket phpleague/oauth2-client
Wir müssen zuerst das Paket phpleague/oauth2-client installieren. Es kann mit dem Composer-Paketmanager installiert werden. Navigieren Sie in einem Terminal oder einer Befehlszeilenschnittstelle zu Ihrem Projektverzeichnis und führen Sie dort den folgenden Befehl aus:
composer require league/oauth2-client
Schritt 2: Provider-Client einrichten
Jetzt müssen wir den Provider-Client definieren. Hier verwenden wir als Beispiel den GitHub OAuth-Anbieter. Ändern Sie zunächst die Werte der Konstanten CLIENT_ID und CLIENT_SECRET mit Ihren tatsächlichen Anmeldeinformationen für die Anwendung.
<?php require 'vendor/autoload.php'; use LeagueOAuth2ClientProviderGithub; const CLIENT_ID = 'your_client_id'; const CLIENT_SECRET = 'your_client_secret'; const REDIRECT_URI = 'http://localhost/oauth2/callback.php'; $provider = new Github([ 'clientId' => CLIENT_ID, 'clientSecret' => CLIENT_SECRET, 'redirectUri' => REDIRECT_URI, ]);
Schritt 3: Besorgen Sie sich den Autorisierungscode
Als nächstes müssen wir den Autorisierungscode besorgen. Der Autorisierungscode ist ein temporäres Token, das zur Überprüfung der Identität beim weiteren Erhalten eines Zugriffstokens verwendet wird.
<?php $authorizationUrl = $provider->getAuthorizationUrl([ 'scope' => ['user', 'repo', 'notifications'] ]); $_SESSION['oauth2state'] = $provider->getState(); header('Location: ' . $authorizationUrl);
Im obigen Code gibt die Methode getAuthorizationUrl()
eine Autorisierungs-URL zurück. Wenn Sie zu dieser URL springen, wird der Benutzer zu GitHub weitergeleitet und aufgefordert, ein Zugriffstoken bereitzustellen. Wenn GitHub autorisiert, leitet es den Benutzer zu einem Umleitungs-URI um, der den Autorisierungscode enthält. getAuthorizationUrl()
方法返回一个授权URL,跳转到该URL将引导用户到GitHub,要求他们提供访问令牌。当GitHub授权后,它会将用户重新路由到一个重定向URI,其中包含授权码。
步骤4:获取访问令牌
现在,我们需要使用我们在上一步中获得的授权码来获取访问令牌。
<?php if (isset($_GET['code']) && isset($_GET['state']) && isset($_SESSION['oauth2state'])) { if ($_GET['state'] === $_SESSION['oauth2state']) { try { $token = $provider->getAccessToken('authorization_code', [ 'code' => $_GET['code'] ]); $accessToken = $token->getToken(); $refreshToken = $token->getRefreshToken(); $expires = $token->getExpires(); } catch (Exception $e) { exit('Failed to get access token: ' . $e->getMessage()); } // Get the user object. try { $user = $provider->getResourceOwner($token); $name = $user->getName(); $email = $user->getEmail(); $imageUrl = $user->getAvatarUrl(); $profileUrl = $user->getHtmlUrl(); } catch (Exception $e) { exit('Failed to get user: ' . $e->getMessage()); } // Store the access token and user data somewhere // for use in your application. $_SESSION['github_access_token'] = $accessToken; $_SESSION['github_refresh_token'] = $refreshToken; $_SESSION['github_expires'] = $expires; $_SESSION['github_user_name'] = $name; $_SESSION['github_user_email'] = $email; $_SESSION['github_user_image'] = $imageUrl; $_SESSION['github_user_profile_url'] = $profileUrl; // Redirect the user to the original page // or some other authorized page in your application. header('Location: /'); exit(); } else { exit('Invalid state'); } }
在上面的代码中,我们首先使用getAccessToken()
方法获取访问令牌。然后,我们使用getResourceOwner()
<?php $client = new GuzzleHttpClient(); $response = $client->request('GET', 'https://api.github.com/user', [ 'headers' => [ 'Authorization' => 'Bearer ' . $_SESSION['github_access_token'], 'User-Agent' => 'OAuth2 Client' ] ]); $body = $response->getBody(); $userData = json_decode($body, true);
getAccessToken()
. Dann verwenden wir die Methode getResourceOwner()
, um das Benutzerobjekt abzurufen. Abschließend speichern wir die Benutzerdaten und das Zugriffstoken in der Sitzung. Schritt 5: Aufrufen der API mithilfe des ZugriffstokensSchließlich können wir die geschützte API mithilfe des Zugriffstokens aufrufen. In diesem Beispiel verwenden wir die GitHub-API, die eine Authentifizierung mithilfe eines Zugriffstokens erfordert. rrreee
Im obigen Code haben wir die GitHub-API mithilfe des Guzzle-HTTP-Clients aufgerufen. Wir setzen den Authorization-Header mit dem Zugriffstoken, um anzugeben, dass wir berechtigt sind, auf diese API zuzugreifen. Fazit🎜🎜Die Integration von OAuth 2.0 in PHP ist eine großartige Möglichkeit, Ihre API zu sichern. Mit dem Paket phpleague/oauth2-client können wir ein Zugriffstoken vom Anbieter erhalten und dieses Token verwenden, um die geschützte API aufzurufen. Darüber hinaus können wir Benutzerdaten und Token für die zukünftige Verwendung speichern. 🎜🎜Jetzt können Sie mit der Integration von OAuth 2.0 beginnen, um Ihre API zu sichern und Benutzerdaten zu schützen. 🎜Das obige ist der detaillierte Inhalt vonSo integrieren Sie OAuth 2.0 in PHP, um die API zu sichern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!