Maison  >  Article  >  développement back-end  >  Comment utiliser l’autorisation d’un tiers pour se connecter en PHP ?

Comment utiliser l’autorisation d’un tiers pour se connecter en PHP ?

王林
王林original
2023-05-13 08:03:361142parcourir

À l'ère sociale d'aujourd'hui, les utilisateurs ne se contentent plus des méthodes traditionnelles d'inscription et de connexion et espèrent se connecter directement en utilisant leurs comptes sociaux déjà enregistrés. Afin de répondre à cette demande, de nombreux sites Web proposent un accès à une connexion tierce. En PHP, nous pouvons implémenter une connexion autorisée par un tiers via le protocole OAuth. Examinons-le ensemble.

Le protocole OAuth est un standard ouvert, principalement utilisé pour autoriser l'accès à des plateformes tierces sans fournir le numéro de compte et le mot de passe de l'utilisateur. Grâce au protocole OAuth, les plateformes tierces peuvent demander des données à d'autres plateformes au nom des utilisateurs, réalisant ainsi le partage de données entre différentes plateformes.

En PHP, il existe généralement les étapes suivantes pour implémenter la connexion autorisée OAuth :

  1. Demander la clé API et la chaîne de clé de la plateforme tierce

Avant d'effectuer une connexion autorisée OAuth, vous devez demander l'API sur la plateforme tierce, d'abord les clés et les porte-clés. En prenant Sina Weibo comme exemple, nous devons demander une clé API et une chaîne de clé sur la plateforme ouverte Sina. Une fois l'application réussie, nous pouvons obtenir les informations suivantes :

App Key : l'identifiant unique de l'application
App Secret : la clé secrète de l'application
Redirect URI : l'URI utilisé pour le rappel doit être cohérent avec celui rempli lors de la candidature

  1. Implémenter le client OAuth

En PHP, nous pouvons utiliser un client OAuth tiers pour implémenter rapidement la fonction de connexion autorisée. Ici, nous prenons Github comme exemple pour présenter comment utiliser un client OAuth tiers. Ici, nous utiliserons le client OAuth2 de PHP League pour implémenter la connexion autorisée par Github.

Tout d'abord, nous devons installer la bibliothèque client OAuth2 de PHP League dans le projet, qui peut être installée à l'aide de composer :

composer require league/oauth2-client

Une fois l'installation terminée, nous devons instancier le client OAuth de Github dans le code et le transmettre pour l'appliquer. la clé API et la chaîne de clé de l'étape précédente.

$provider = new LeagueOAuth2ClientProviderGithub([
    'clientId'          => 'CLIENT_ID',
    'clientSecret'      => 'CLIENT_SECRET',
    'redirectUri'       => 'REDIRECT_URI',
    'scopes'            => ['user'],
]);

Parmi eux, CLIENT_ID et CLIENT_SECRET sont la clé API et la chaîne de clé appliquées à l'étape précédente, et REDIRECT_URI est l'URI de rappel.

  1. Obtenir le code d'autorisation

Avant la connexion d'autorisation OAuth, vous devez envoyer une demande à la plateforme tierce pour obtenir le code d'autorisation. En prenant Github comme exemple, nous pouvons utiliser le code suivant pour rediriger les utilisateurs vers la page d'authentification Github :

// Step 1. Get authorization code
$options = [
    'state' => 'OPTIONAL_CUSTOM_CONFIGURED_STATE',
     // ...
];
$authUrl = $provider->getAuthorizationUrl($options);

// Store state so that the callback can verify the response
$_SESSION['oauth2state'] = $provider->getState();

// Redirect the user to the authorization URL
header('Location: '.$authUrl);
exit;

Lors de la demande de la page d'authentification Github, nous transmettons un tableau $options pour spécifier la portée de l'autorisation et d'autres informations. $_SESSION['oauth2state'] est utilisé pour enregistrer la valeur d'état renvoyée.

  1. Obtenir le jeton d'accès

Une fois que l'utilisateur a réussi l'authentification tierce, nous devons obtenir le jeton d'accès via l'URI de rappel. En prenant Github comme exemple, nous pouvons utiliser le code suivant pour obtenir le jeton d'accès :

// Step 2. Get an access token using the authorization code grant
if (isset($_GET['code']) && isset($_GET['state'])) {
    if ($_GET['state'] !== $_SESSION['oauth2state']) {
        unset($_SESSION['oauth2state']);
        exit('State error');
    }

    // Get an access token using the authorization code grant
    try {
        $token = $provider->getAccessToken('authorization_code', [
            'code' => $_GET['code']
        ]);

        // Optional: Store the token
        $_SESSION['access_token'] = $token->getToken();
    } catch (LeagueOAuth2ClientProviderExceptionIdentityProviderException $e) {
        exit('Token error: '.$e->getMessage());
    }

    header('Location: '.$_SERVER['PHP_SELF']);
    exit;
}

Après avoir obtenu le jeton d'accès, nous pouvons stocker le jeton dans SESSION pour une utilisation ultérieure.

  1. Obtenir des informations utilisateur

Après avoir obtenu le jeton d'accès, nous pouvons obtenir des informations utilisateur via le client OAuth. En prenant Github comme exemple, nous pouvons utiliser le code suivant pour obtenir des informations sur l'utilisateur :

if (isset($_SESSION['access_token'])) {
    $token = new LeagueOAuth2ClientTokenAccessToken(['access_token' => $_SESSION['access_token']]);

    try {
        $user = $provider->getResourceOwner($token);
        echo 'Hello '.$user->getName();
    } catch (LeagueOAuth2ClientProviderExceptionIdentityProviderException $e) {
        exit('Resource owner error: '.$e->getMessage());
    }
}

Après avoir obtenu les informations sur l'utilisateur, nous pouvons les traiter en fonction des besoins, tels que l'inscription, la connexion, la personnalisation et d'autres opérations.

Ce qui précède est le processus de base de mise en œuvre d'une connexion tierce autorisée en PHP. Bien entendu, dans les applications pratiques, de nombreux problèmes de sécurité et commerciaux doivent être pris en compte, tels que la prévention des attaques CSRF, la synchronisation des données des utilisateurs, etc. Cependant, grâce au processus de base ci-dessus, je pense que les lecteurs peuvent avoir une compréhension plus approfondie de la connexion autorisée OAuth.

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!

Déclaration:
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