Heim >Backend-Entwicklung >PHP-Tutorial >PHP Master | OAuth verstehen - Tweeten von Grund auf, Teil 1

PHP Master | OAuth verstehen - Tweeten von Grund auf, Teil 1

Lisa Kudrow
Lisa KudrowOriginal
2025-03-02 08:39:10248Durchsuche

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

Kernpunkte

  • oAuth ist wie ein "Valet -Schlüssel", mit dem PHP -Anwendungen im Namen von Benutzern auf Twitter veröffentlichen können, ohne jedes Mal einen Benutzernamen und ein Passwort eingeben zu müssen. Eine Anwendung ist ein Verbraucher, ein Benutzer ist ein Ressourcenbesitzer, und Twitter ist ein Server oder Dienstanbieter.
  • Um Informationen auf Twitter zu veröffentlichen, muss die Anwendung eigene Kundenanmeldeinformationen erhalten: den Verbraucherschlüssel und der Verbraucherschlüssel. Twitter gewährt diese Anmeldeinformationen, nachdem die Bewerbung das Registrierungsformular ausgeschlossen hat und Informationen wie Name, Beschreibung, Website -URL und Callback -URL enthält.
  • Verbraucherschlüssel und Verbraucherschlüssel ermöglichen es der Anwendung, mit der Twitter -API zu kommunizieren, aber Tweets im Namen des Benutzers zu veröffentlichen, erfordert auch Zugriffsanmeldeinformationen: Zugriff auf Token und Zugriffsschlüssel. Diese werden mithilfe von Verbraucheranmeldeinformationen erhalten, um mit Twitter und Endbenutzern zu sprechen.
  • Dieser Artikel enthält eine detaillierte Schritt-für-Schritt-Anleitung zum Erhalten dieser Anmeldeinformationen, einschließlich des Code, der zum Generieren der URL für Anforderungsanweisungen erforderlich ist, wie eine Signatur basierend auf einer Zeichenfolge erstellt wird, und wie eine URL erstellt wird, die Zugriffsanmeldeinformationen anfordert.

Viele Leute denken, dass OAuth schwer zu verstehen ist, wahrscheinlich weil die Leute erwarten, dass die Abstraktion von Bibliotheken von Drittanbietern die Notwendigkeit beseitigt, OAuth-Transaktionsschritte zu verstehen-aber das ist nicht der Fall. Dieser Artikel ist in zwei Teile unterteilt und zeigt, wie OAuth v1 funktioniert, indem eine PHP-Anwendung mit der Twitter-API angeschlossen wird, indem nur wenige integrierte Funktionen mit dem Twitter-Stream des Benutzers veröffentlichen. Der in diesem Artikel bereitgestellte Beispielcode dient nur zu Bildungszwecken. Es fehlt die praktische Verwendung und Fehlerbehandlung, und jede tatsächliche Entwicklung sollte die vorhandene OAuth -Bibliothek nutzen. Nach dem Lesen dieses Artikels werden Sie jedoch besser verstehen, wie OAuth funktioniert, und in der Lage sein, alle Probleme besser zu lösen.

Erhalten Sie Verbraucher -Anmeldeinformationen

Veröffentlichen Sie im Namen des Benutzers auf Twitter, ohne jedes Mal eine Kombination aus Benutzername und Passwort zu fragen. Es erfordert eine "Valet -Taste" ... Dieser Schlüssel ist oAuth. In OAuth -Begriffen wird Ihre Client -Anwendung Consumer bezeichnet, der Benutzer wird Ressourcenbesitzer bezeichnet und Twitter ist ein Server oder Serviceanbieter . Bevor Twitter Informationen akzeptiert, die von Ihrer Bewerbung veröffentlicht werden, müssen Sie Ihre eigenen Client -Anmeldeinformationen erhalten: Verbraucherschlüssel und Verbraucherschlüssel . Twitter (und die meisten Dienste, die öffentliche APIs anbieten) gewähren Ihnen den Schlüssel und die Schlüssel, nachdem Sie das Registrierungsformular ausgeschlossen haben (verfügbar unter dev.twitter.com/apps). Auf Twitter müssen Sie einige Informationen, um Ihre Anwendung, insbesondere den Namen, die Beschreibung und die URL der Website, den Benutzern während des Autorisierungsprozesses zu identifizieren. Sie müssen auch die Callback -URL eingeben, die ich später erklären werde. Nach dem Einreichen des Antragsformulars erstellen werden Sie zur Detail -Seite der neuen Anwendung übertragen. Scrollen Sie nach unten, um Ihren Verbraucherschlüssel und Ihren Schlüssel zu finden. Sie benötigen diese Schlüssel zusammen mit einer kleinen Anzahl von Endpunkt -URLs, die aufgeführt sind. Beachten Sie, dass die Anwendung standardmäßig schreibgeschützt ist.

autorisierte Anwendung

Verbraucherschlüssel und Verbraucherschlüssel ermöglichen es Ihrer Anwendung, mit der Twitter -API zu kommunizieren, aber diese Schlüssel allein können Tweets im Namen anderer Benutzer nicht veröffentlichen. Sie benötigen Zugriffsanmeldeinformationen: Zugriffsantrieb und Zugriffsschlüssel . Um diese Anmeldeinformationen zu erhalten, indem Sie Verbraucher -Anmeldeinformationen verwenden, um eine kurze Konversation mit Twitter und Endbenutzern zu führen, stellen Sie eine Anfrage an den Dienstanbieter (Twitter). Das Erhalten von Zugriffsanmeldeinformationen kann ziemlich umständlich sein, aber zum Glück müssen Sie dies nur einmal für jeden Benutzer tun. Sie können Anmeldeinformationen für die spätere Verwendung auf unbestimmte Zeit speichern, ohne dass der Benutzer Ihre Anwendung erneut autorisiert. Eine Konversation, die Zugriff auf Anmeldeinformationen verlangt, erfordert seine eigenen Anmeldeinformationen: Anfrage Token und Anforderungsschlüssel .

Autorisierungs Schritt 1: Anfragen Anmeldeinformationen

Der Autorisierungsprozess beginnt normalerweise damit, den Benutzer auf die Seite "Autorisierung Twitter" zu leiten. Dies ist die Seite, die Sie erstellt haben, auf der das Anfrage -Token von Twitter startet und den OAuth -Autorisierungsprozess gestartet wird. Es muss eine URL generiert werden, um die angeforderten Anmeldeinformationen zu erhalten, und sobald Sie die Anmeldeinformationen haben, können Sie den Benutzer zu Twitter umleiten, um die Erlaubnis zur Bewerbung zu erteilen. Die Anmeldeinformationen für Anforderungsanforderungen erfordern eine Signaturanforderung, was bedeutet, dass Sie eine OAuth -Signatur zusammen mit anderen wichtigen Parametern in der Anfrage senden müssen. Die Signatur ist eine base64 codierte Hash -Liste der angeforderten Parameter. Im Fall von Twitter ist der Hashing-Algorithmus HMAC-SHA1. Der Signaturprozess verhindert, dass andere Ihre Bewerbung ausgeben, um Ihre Anmeldeinformationen zu verwenden, auch wenn der Verbraucherschlüssel im Klartext übertragen wird. Nur Sie (der Verbraucher) und der Server (Twitter) können die Signatur reproduzieren, da Sie beide die einzigen Einheiten sind, die den Verbraucherschlüssel kennen, der die Signatur hasht. Erstellen wir eine Zeichenfolge, auf der die Signatur basiert:

<?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);

Einige der oben genannten Variablen sind möglicherweise ziemlich offensichtlich - $ requestTokenurl wird von Twitter entnommen, wenn Sie die Verbraucher -Anmeldeinformationen erhalten, und $ oAuthtimestamp ist der aktuelle Unix -Zeitstempel. Der weniger offensichtliche Element ist $ nonce, was nichts weiter als eine zufällige Zeichenfolge ist, die nur einmal verwendet wird (jede Transaktion verwendet einen anderen Nonce). Im Allgemeinen sind MD5 -Hash -Zufallszahlen als Nonce sehr nützlich. Es gibt auch $ oAuthSignaturemethod, das immer HMAC-Sha1 für Twitter ist, und $ oAuthversion für Twitter, derzeit V1.0 für Twitter. Als nächstes wird die signierte Zeichenfolge als $ sigbase konstruiert. OAuth points out that the signature base must be an HTTP method (in this case GET), followed by a "&" followed by a URL-encoded request URL ($requestTokenUrl), followed by another "&", and finally a URL-encoded and alphabetical list of parameter key/value pairs (whose values ​​​​must also be encoded), separated by a "&". Beachten Sie, dass bei OAuth URL-kodierte Inhalte auf RFC-3986 bezieht. Die Funktion von PHP von rawurlencode () funktioniert, da sie Räume als ", anstatt" codiert, wie Urlencode (). Sie benötigen auch einen Signaturschlüssel. Der Schlüssel ist immer ein Verbraucherschlüssel, gefolgt von einem "&" und 1) einen OAuth -Token -Schlüssel (der Teil der Token -Anmeldeinformationen ist, die Sie noch nicht haben) oder 2) nichts. Sie können dann die integrierte Hash_HMAC () -Funktion von PHP verwenden, um die endgültige Signatur zu generieren.

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

Sie stellen alle Teile zusammen, um eine URL zu erstellen, die die Anmeldeinformationen anfordert:

<?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);

Sie benötigen mehr Fehlerbehandlungen für alles, was über diese einfache Demo hinausgeht, aber im Moment gehe ich davon aus, dass es keine Fehler gibt und Sie in der Lage sind, temporäre Anmeldeinformationen in $ Antwort zu erhalten. Die von Twitter zurückgesandte Antwort lautet wie folgt:

<code>oauth_token=mjeaYNdNYrvLBag6xJNWkxCbgL5DV6yPZl6j4palETU&oauth_token_secret=W45dnBz917gsdMqDu4bWNmShQq5A8pRwoLnJVm6kvzs&oauth_callback_confirmed=true</code>
Die Werte

oAuth_Token und oAuth_Token_secret werden aus der Antwort extrahiert und werden verwendet, um den nächsten Link auf den Benutzer zu erstellen, der im zweiten Schritt des Autorisierungsprozesses zugreift. Es ist am besten, die angeforderten Anmeldeinformationen in der Sitzung des Benutzers zu speichern, damit er verwendet werden kann, wenn der Benutzer von der Autorisierungsseite von Twitter zurückkehrt. Die Autorisierungs -URL ist auf der Seite der Details verfügbar nach der Registrierung Ihrer Bewerbung über 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);

Jetzt, da die App Benutzer zur Autorisierung an Twitter senden kann, ist es ein guter Zeitpunkt, um eine Callback -URL hinzuzufügen, damit Twitter sie an die App zurücksenden kann! Die Callback -URL ist nichts anderes als die Adresse, an die Twitter den Benutzer anweist, nachdem der Benutzer Ihre Anwendung autorisiert hat, einen Tweet in seinem Namen zu senden, und ist auf der Registerkarte Einstellungen der Detail -Seite angegeben. Wenn Twitter den Benutzer in die Callback -URL weiterleitet, findet er zwei zusätzliche Parameter an: die in Ihrer anfänglichen Anforderung, die zur Überprüfung verwendet werden kann, und die OAuth_Verifier, die für Autorisierungsanmeldeinformationen verwendet werden kann. In den drei Anmeldeinformationen müssen Sie einen Tweet veröffentlichen. Sie haben jetzt zwei - Konsumenten -Anmeldeinformationen und Anfragenanmeldeinformationen. Weiter: Zugriff auf Anmeldeinformationen!

Autorisierungsschritt 2: Zugriff auf Anmeldeinformationen

Um Zugriffsanmeldeinformationen zu erhalten, benötigen Sie OAuth_Token, oAuth_Token_secret und neu erhaltene OAuth_Verifier. Dieser Schritt erfordert eine weitere Signaturanforderung, diesmal für die auf der Seite Details angezeigte URL zu Access -Token.

<?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 ist der nächste Endpunkt, der aus der Detail -Seite erhalten wird. Generieren Sie neue $ oauthtimestamp und $ nonce und senden Sie $ oauthverifier von der Twitter -Autorisierungsseite zurück. Nicht aufgeführt, aber im $ _Session -Array sind auch die Anmeldeinformationen aus dem vorherigen Schritt erforderlich, die ebenfalls erforderlich sind. Dieser Schritt im Autorisierungsprozess erfordert eine andere Signaturanforderung. Sobald die Signatur erstellt wurde, wird sie mit der Access -Anmeldeinformationsanforderung verwendet.

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

Diesmal enthält $ $ response sehr nützlich screen_name, user_id und lang erwartete Zugriffsanmeldeinformationen!

Zusammenfassung

Dieser Artikel beendet den Berechtigungsabschnitt. Bisher haben Sie gelernt, wie man eine neue Twitter -Anwendung erstellt und den "Tanz" von OAuth mit den bereitgestellten Verbraucher -Anmeldeinformationen durchgeht, um Zugriffsanmeldeinformationen zu erhalten. Im zweiten und letzten Teil dieser Serie werde ich diskutieren, wie Sie Zugriffsanmeldeinformationen verwenden, um Tweets auf dem Twitter -Stream eines Benutzers zu veröffentlichen.

(Das Originalbild sollte hier beibehalten werden, aber da das Bild nicht direkt angezeigt werden kann, wird der Bildlink beibehalten)

oAuth 1.0 FAQ (FAQ)

(Der ursprüngliche FAQ -Inhalt sollte hier beibehalten werden, aber aufgrund der Länge des Artikels wird der FAQ -Teil hier aus dem Einfachheit halber weggelassen.)

Das obige ist der detaillierte Inhalt vonPHP Master | OAuth verstehen - Tweeten von Grund auf, Teil 1. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn