Maison >développement back-end >tutoriel php >PHP Master | Comprendre Oauth - Tweet à partir de zéro, partie 1

PHP Master | Comprendre Oauth - Tweet à partir de zéro, partie 1

Lisa Kudrow
Lisa Kudroworiginal
2025-03-02 08:39:10246parcourir

PHP Master | Understanding OAuth - Tweeting from Scratch, Part 1

Points de base

  • OAuth est comme une "clé de voiturier" qui permet aux applications PHP de publier sur Twitter au nom des utilisateurs sans avoir à saisir un nom d'utilisateur et un mot de passe à chaque fois. Une application est un consommateur, un utilisateur est propriétaire d'une ressource et Twitter est un serveur ou un fournisseur de services.
  • Pour publier des informations sur Twitter, l'application doit obtenir ses propres informations d'identification du client: la clé de consommation et la clé de consommation. Twitter accorde ces informations d'identification une fois que la demande a rempli le formulaire d'inscription et fournit des informations telles que son nom, sa description, l'URL du site Web et l'URL de rappel.
  • La clé de consommation et la clé de consommation permettent à l'application de communiquer avec l'API Twitter, mais de publier des tweets au nom de l'utilisateur, il nécessite également des informations d'identification d'accès: jetons d'accès et clés d'accès. Ceux-ci sont obtenus en utilisant des informations d'identification des consommateurs pour parler à Twitter et aux utilisateurs finaux.
  • Cet article fournit un guide détaillé étape par étape sur la façon d'obtenir ces informations d'identification, y compris le code requis pour générer l'URL des informations d'identification de la demande, comment créer une signature en fonction d'une chaîne et comment créer une URL qui demande des informations d'identification d'access.

Beaucoup de gens pensent que OAuth est difficile à comprendre, probablement parce que les gens s'attendent à ce que l'abstraction fournie par les bibliothèques tierces éliminera la nécessité de comprendre les étapes de transaction OAuth - mais ce n'est pas le cas. Cet article est divisé en deux parties, démontrant comment OAuth V1 fonctionne en connectant une application PHP à l'API Twitter en utilisant seulement quelques fonctions intégrées pour publier des messages au flux Twitter de l'utilisateur. L'exemple de code fourni dans cet article est à des fins éducatives uniquement. Il manque une utilisation pratique et une gestion des erreurs, et tout développement réel devrait profiter de la bibliothèque OAuth existante, mais après avoir lu cet article, vous aurez une meilleure compréhension du fonctionnement d'Oauth et vous pourrez mieux résoudre les problèmes qui pourraient survenir.

obtenir des informations d'identification des consommateurs

Publier sur Twitter au nom de l'utilisateur sans demander une combinaison de nom d'utilisateur et de mot de passe à chaque fois, il nécessite une "clé de voiturier" ... Cette clé est OAuth. En termes d'OAuth, votre application client est appelée Consumer , l'utilisateur est appelé propriétaire de ressource , et Twitter est un serveur ou fournisseur de service . Avant que Twitter accepte les informations publiées par votre demande, vous devez obtenir vos propres informations d'identification du client: Consumer Key et Consumer Key . Twitter (et la plupart des services qui fournissent des API publics) vous accordent la clé et la clé après avoir rempli le formulaire d'inscription (disponible sur dev.twitter.com/apps). Sur Twitter, vous devez fournir des informations pour identifier votre application, en particulier son nom, sa description et l'URL du site Web, aux utilisateurs pendant le processus d'autorisation. Vous devez également saisir l'URL de rappel, ce que je vais expliquer plus tard. Après avoir soumis le formulaire de création de demande, vous serez emmené sur la page Détails de la nouvelle demande. Faites défiler vers le bas pour trouver votre clé de consommation et votre clé. Vous aurez besoin de ces clés avec un petit nombre d'URL de point de terminaison répertorié. Notez que l'application est accordé en lecture seule par défaut;

Application autorisée

Les clés de consommation et les clés de consommation permettent à votre application de communiquer avec l'API Twitter, mais ces clés à elles seules ne peuvent pas publier des tweets au nom d'autres utilisateurs. Vous avez besoin d'identification d'accès: Token d'accès et Clé d'accès . Pour obtenir ces informations d'identification en utilisant des informations d'identification des consommateurs pour avoir une brève conversation avec Twitter et les utilisateurs finaux, faites une demande au fournisseur de services (Twitter). Obtenir des informations d'identification d'accès peut être assez lourd, mais heureusement, vous n'avez besoin de le faire qu'une seule fois pour chaque utilisateur. Vous pouvez enregistrer indéfiniment les informations d'identification pour une utilisation ultérieure sans que l'utilisateur ne réautorisant votre application. Une conversation qui demande l'accès aux informations d'identification nécessite son propre ensemble d'identification: de demande de jeton et de demande de clé .

Autorisation Étape 1: Demandez les informations d'identification

Le processus d'autorisation commence généralement par diriger l'utilisateur vers la page "Autorisation Twitter". Il s'agit de la page que vous avez créée qui démarre le jeton de demande de Twitter et démarre le processus d'autorisation OAuth. Il doit générer une URL pour obtenir les informations d'identification demandées, et une fois que vous avez les informations d'identification, vous pouvez rediriger l'utilisateur vers Twitter pour accorder l'autorisation de publication de la demande. Les informations d'identification de la demande nécessitent une demande de signature, ce qui signifie que vous devez envoyer une signature OAuth avec d'autres paramètres importants dans la demande. La signature est une liste de hachage codée Base64 des paramètres demandés. Dans le cas de Twitter, l'algorithme de hachage est HMAC-Sha1. Le processus de signature empêche les autres d'identiter votre application d'utiliser vos informations d'identification, même si la clé de consommation est transférée en texte brut. Seuls vous (le consommateur) et le serveur (Twitter) pouvez reproduire la signature, car vous deux êtes les seules entités qui devraient connaître la clé de consommation qui hachent la signature. Créons une chaîne sur laquelle la signature est basée:

<?php
$requestTokenUrl = "http://api.twitter.com/oauth/request_token";
$authorizeUrl = "http://api.twitter.com/oauth/authorize";
$oauthTimestamp = time();
$nonce = md5(mt_rand());
$oauthSignatureMethod = "HMAC-SHA1";
$oauthVersion = "1.0";

$sigBase = "GET&" . rawurlencode($requestTokenUrl) . "&"
    . rawurlencode("oauth_consumer_key=" . rawurlencode($consumerKey)
    . "&oauth_nonce=" . rawurlencode($nonce)
    . "&oauth_signature_method=" . rawurlencode($oauthSignatureMethod)
    . "&oauth_timestamp=" . $oauthTimestamp
    . "&oauth_version=" . $oauthVersion);

Certaines des variables ci-dessus peuvent être assez évidentes - $ requestTokenurl est tiré de Twitter lorsque vous obtenez les informations d'identification des consommateurs, et $ oAuthtimeStamp est le timestamp Unix actuel. L'élément moins évident est $ nonce, qui n'est rien de plus qu'une chaîne aléatoire qui n'est utilisée qu'une seule fois (chaque transaction utilise un nonce différent). Généralement, les nombres aléatoires du hachage MD5 sont très utiles comme nonce. Il y a aussi $ oAuthsignatueMethod, qui est toujours HMAC-Sha1 pour Twitter, et $ oauthVersion pour Twitter, actuellement v1.0 pour Twitter. Ensuite, la chaîne signée est construite comme $ sigbase. OAuth souligne que la base de signature doit être une méthode HTTP (dans ce cas, GET), suivie d'un "&", suivi d'une URL de demande codée par URL ($ demandeTokenurl), suivi par une autre "&", et enfin une liste de clés / valeurs de paramètre (dont les valeurs doivent également être enduites), séparées par une "". ". Notez que lorsque OAuth nécessite un contenu codé par URL, il fait référence à RFC-3986. La fonction RawUrlencode () de PHP fonctionne car elle code pour les espaces comme ", plutôt que", comme UrLencode (). Vous avez également besoin d'une clé de signature. La clé est toujours une clé de consommation suivie d'un "&", et 1) une clé de jeton OAuth (qui fait partie des informations d'identification de jeton que vous n'avez pas encore), ou 2) rien. Vous pouvez ensuite utiliser la fonction HASH_HMAC () intégrée de PHP pour générer la signature finale.

<?php
$sigKey = $consumerSecret . "&";
$oauthSig = base64_encode(hash_hmac("sha1", $sigBase, $sigKey, true));

Vous assemblez toutes les pièces pour construire une URL qui demande les informations d'identification:

<?php
$requestUrl = $requestTokenUrl . "?"
    . "oauth_consumer_key=" . rawurlencode($consumerKey)
    . "&oauth_nonce=" . rawurlencode($nonce)
    . "&oauth_signature_method=" . rawurlencode($oauthSignatureMethod)
    . "&oauth_timestamp=" . rawurlencode($oauthTimestamp)
    . "&oauth_version=" . rawurlencode($oauthVersion)
    . "&oauth_signature=" . rawurlencode($oauthSig);

$response = file_get_contents($requestUrl);

Vous avez besoin de plus de traitement des erreurs pour quoi que ce soit au-delà de cette simple démo, mais pour l'instant, je suppose qu'il n'y aura pas d'erreurs et que vous pouvez recevoir des informations d'identification de demande temporaire dans $ Response. La réponse renvoyée par Twitter est la suivante:

<code>oauth_token=mjeaYNdNYrvLBag6xJNWkxCbgL5DV6yPZl6j4palETU&oauth_token_secret=W45dnBz917gsdMqDu4bWNmShQq5A8pRwoLnJVm6kvzs&oauth_callback_confirmed=true</code>
Les valeurs

oauth_token et oauth_token_secret sont extraites de la réponse et sont utilisées pour créer le lien suivant auxquels les accès aux utilisateurs à la deuxième étape du processus d'autorisation. Il est préférable de stocker les informations d'identification demandées dans la session de l'utilisateur afin qu'ils puissent être utilisés lorsque l'utilisateur revient de la page d'autorisation de Twitter. L'URL d'autorisation est disponible sur la page Détails après avoir enregistré votre demande à l'aide de Twitter.

<?php
parse_str($response, $values);
$_SESSION["requestToken"] = $values["oauth_token"];
$_SESSION["requestTokenSecret"] = $values["oauth_token_secret"];

$redirectUrl = $authorizeUrl . "?oauth_token=" . $_SESSION["requestToken"];
header("Location: " . $redirectUrl);

Maintenant que l'application peut envoyer des utilisateurs à Twitter pour l'autorisation, c'est le bon moment pour ajouter une URL de rappel afin que Twitter puisse les renvoyer à l'application! L'URL de rappel n'est rien de plus que l'adresse à laquelle Twitter a dirigé l'utilisateur après que l'utilisateur autorise votre application à envoyer un tweet en son nom et est spécifié sur l'onglet Paramètres de la page Détails. Lorsque Twitter redirige l'utilisateur vers l'URL de rappel, il ajoute deux paramètres supplémentaires: le OAuth_token dans votre demande initiale, qui peut être utilisé pour la vérification, et le OAuth_verifier, qui peut être utilisé pour les informations d'identification d'autorisation. Dans les trois ensembles d'identification, vous devez publier un tweet, vous en avez maintenant deux - des informations d'identification et demandez les informations d'identification. SUIVANT: Accès aux informations d'identification!

Autorisation Étape 2: Informations d'accès

Pour obtenir des informations d'accès à l'accès, vous avez besoin de OAuth_Token, OAuth_Token_Secret et nouvellement obtenu OAuth_verifier. Cette étape nécessite une autre demande de signature, cette fois pour l'URL du jeton d'accès affichée sur la page Détails.

<?php
$requestTokenUrl = "http://api.twitter.com/oauth/request_token";
$authorizeUrl = "http://api.twitter.com/oauth/authorize";
$oauthTimestamp = time();
$nonce = md5(mt_rand());
$oauthSignatureMethod = "HMAC-SHA1";
$oauthVersion = "1.0";

$sigBase = "GET&" . rawurlencode($requestTokenUrl) . "&"
    . rawurlencode("oauth_consumer_key=" . rawurlencode($consumerKey)
    . "&oauth_nonce=" . rawurlencode($nonce)
    . "&oauth_signature_method=" . rawurlencode($oauthSignatureMethod)
    . "&oauth_timestamp=" . $oauthTimestamp
    . "&oauth_version=" . $oauthVersion);

$ AccessTokenUrl est le prochain point de terminaison obtenu à partir de la page Détails. Générez un nouveau $ oAuthtimestamp et $ nonce et renvoyer $ oauthverifier à partir de la page d'autorisation Twitter. Non répertorié, mais dans le tableau $ _Session, sont les informations d'identification de la demande de l'étape précédente, qui sont également requises. Cette étape du processus d'autorisation nécessite une autre demande de signature. Une fois la signature construite, elle sera utilisée avec la demande d'identification d'accès.

<?php
$sigKey = $consumerSecret . "&";
$oauthSig = base64_encode(hash_hmac("sha1", $sigBase, $sigKey, true));

Cette fois, $ la réponse contient des informations d'accès très utiles Screen_name, User_ID et les informations d'accès tant attendues!

Résumé

Cet article met fin à la section d'autorisation. Jusqu'à présent, vous avez appris à créer une nouvelle application Twitter et à parcourir le "Dance" OAuth avec les informations d'identification des consommateurs fournies pour obtenir des informations d'identification d'accès. Dans la deuxième et dernière partie de cette série, je vais discuter de la façon d'utiliser des informations d'accès pour publier des tweets au flux Twitter d'un utilisateur.

(L'image d'origine doit être conservée ici, mais comme l'image ne peut pas être affichée directement, le lien d'image est conservé)

OAuth 1.0 FAQ (FAQ)

(Le contenu FAQ d'origine doit être conservé ici, mais en raison de la durée de l'article, la partie FAQ est omise ici par souci de simplicité.)

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