Maison > développement back-end > tutoriel php > Comment intégrer OAuth 2.0 en PHP pour sécuriser l'API

Comment intégrer OAuth 2.0 en PHP pour sécuriser l'API

WBOY
Libérer: 2023-06-17 11:02:01
original
1406 Les gens l'ont consulté

Dans les applications mobiles et web actuelles, les API sont un élément essentiel. Elles fournissent des interfaces interactives pour les utilisateurs et les applications. Cependant, ces API présentent également des risques pour les utilisateurs malveillants et les pirates informatiques, et peuvent entraîner une fuite de données sensibles. Par conséquent, les API doivent être sécurisées pour empêcher tout accès non autorisé. OAuth 2.0 est un moyen éprouvé pour vous permettre d'accéder à une API via un jeton tout en garantissant que vous êtes autorisé à le faire.

Dans cet article, nous explorerons comment intégrer OAuth 2.0 en PHP pour sécuriser les API.

Qu'est-ce qu'OAuth 2.0 ?

OAuth 2.0 est un standard ouvert qui permet aux utilisateurs d'autoriser des tiers à accéder à leurs ressources (par exemple, photos, documents, contacts, etc.). Plus précisément, OAuth 2.0 utilise des jetons d'autorisation pour accéder à ses ressources au nom des utilisateurs. Un jeton d'accès est un identifiant émis par un serveur d'autorisation et fourni à l'appelant lors de l'accès à une ressource. Les appelants peuvent utiliser ce jeton à chaque demande pour indiquer qu'ils sont autorisés à accéder à la ressource.

Intégrer OAuth 2.0 en PHP

En PHP, il existe de nombreuses bibliothèques OAuth 2.0 parmi lesquelles choisir. Dans cet article, nous présenterons le processus d'implémentation d'OAuth 2.0 à l'aide du package phpleague/oauth2-client.

Étape 1 : Installer le package PHPleague/oauth2-client

Nous devons d'abord installer le package PHPleague/oauth2-client. Il peut être installé à l'aide du gestionnaire de packages Composer. Accédez au répertoire de votre projet dans un terminal ou une interface de ligne de commande et exécutez-y la commande suivante :

composer require league/oauth2-client
Copier après la connexion

Étape 2 : Configurez le client fournisseur Définissez le client fournisseur. Ici, nous utilisons le fournisseur GitHub OAuth comme exemple. Tout d'abord, modifiez les valeurs des constantes CLIENT_ID et CLIENT_SECRET avec vos informations d'identification réelles d'application.

<?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,
]);
Copier après la connexion

Étape 3 : Obtenir le code d'autorisation

Ensuite, nous devons obtenir le code d'autorisation. Le code d'autorisation est un jeton temporaire utilisé pour vérifier l'identité lors de l'obtention ultérieure d'un jeton d'accès.

<?php

$authorizationUrl = $provider->getAuthorizationUrl([
    'scope' => ['user', 'repo', 'notifications']
]);

$_SESSION['oauth2state'] = $provider->getState();

header('Location: ' . $authorizationUrl);
Copier après la connexion

Dans le code ci-dessus, la méthode getAuthorizationUrl() renvoie une URL d'autorisation, et accéder à cette URL dirigera l'utilisateur vers GitHub, lui demandant de fournir un jeton d'accès . Lorsque GitHub autorise, il redirige l'utilisateur vers un URI de redirection contenant le code d'autorisation.

Étape 4 : Obtenir le jeton d'accèsgetAuthorizationUrl()方法返回一个授权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');
    }
}
Copier après la connexion

在上面的代码中,我们首先使用getAccessToken()方法获取访问令牌。然后,我们使用getResourceOwner()

Maintenant, nous devons obtenir le jeton d'accès en utilisant le code d'autorisation que nous avons obtenu à l'étape précédente.

<?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);
Copier après la connexion
Dans le code ci-dessus, nous utilisons d'abord la méthode getAccessToken() pour obtenir le jeton d'accès. Ensuite, nous utilisons la méthode getResourceOwner() pour obtenir l'objet utilisateur. Enfin, nous stockons les données utilisateur et le jeton d'accès dans la session.

Étape 5 : Appeler l'API à l'aide du jeton d'accès

Enfin, nous pouvons appeler l'API protégée à l'aide du jeton d'accès. Dans cet exemple, nous utiliserons l'API GitHub, qui nous oblige à nous authentifier à l'aide d'un jeton d'accès.

rrreee

Dans le code ci-dessus, nous avons appelé l'API GitHub en utilisant le client HTTP Guzzle. Nous définissons l'en-tête Authorization avec le jeton d'accès pour indiquer que nous avons l'autorisation d'accéder à cette API.

Conclusion

Intégrer OAuth 2.0 dans PHP est un excellent moyen de sécuriser votre API. En utilisant le package phpleague/oauth2-client, nous pouvons obtenir un jeton d'accès du fournisseur et utiliser ce jeton pour appeler l'API protégée. De plus, nous pouvons stocker les données utilisateur et les jetons pour une utilisation future. #🎜🎜##🎜🎜#Vous pouvez désormais commencer à intégrer OAuth 2.0 pour sécuriser votre API et protéger les données des utilisateurs. #🎜🎜#

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal