Ich versuche, die WordPress Rest-API mit Authentifizierung zu verwenden, um mehr Daten von der API zu erhalten. Ich habe das Oauth-Plugin, das rest-api-Plugin und API-Anmeldeinformationen von WP-CLI installiert.
Ich habe herausgefunden, wie ich ohne Autorisierung auf Daten zugreifen kann. Das funktioniert:
// set our end point
$domain = "http://localhost/wp-api";
$endpoint = $domain."/wp-json/wp/v2/posts/";
$curl = curl_init($endpoint);
curl_setopt_array($curl, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_URL => $endpoint,
]);
$response = curl_exec($curl);
$decoderesponse = json_decode($response, true);
?>
<pre>
<?php print_r($decoderesponse); ?>
</pre>
Ich kann jedoch nicht herausfinden, wie ich mich mit Anmeldeinformationen authentifizieren kann. Hier ist mein Versuch. Ich bin nicht sicher, ob "Schlüssel" und "Geheimnis" richtig sind.
// Oauth credentials from wp-cli
$ID = "4";
$Key = "l8XZD9lX89kb";
$Secret = "UUbcc8vjUkGjuDyvK1gRTts9sZp2N8k9tbIQaGjZ6SNOyR4d";
// set our end point
$domain = "http://localhost/wp-api";
$endpoint = $domain."/wp-json/wp/v2/posts/1/revisions";
$headers[] = "key=$Key";
$headers[] = "secret=$Secret";
$curl = curl_init($endpoint);
curl_setopt_array($curl, [
CURLOPT_HTTPHEADER => $headers,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_URL => $endpoint,
]);
$response = curl_exec($curl);
$decoderesponse = json_decode($response, true);
?>
<pre>
<?php print_r($decoderesponse); ?>
</pre>
Die Ausgabe ist
Array
(
[code] => rest_cannot_read
[message] => Sorry, you cannot view revisions of this post.
[data] => Array
(
[status] => 401
)
)
Wie kann ich das zum Laufen bringen? Vielen Dank.
authentication
rest-api
curl
JediTricks007
quelle
quelle
Antworten:
Gehen wir hier Schritt für Schritt vor. Anscheinend versuchen Sie, OAuth nur für die Authentifizierung zu verwenden, aber bevor Sie dies tun können, müssen Sie das Zugriffstoken abrufen , das zur Authentifizierung bei Ihren API-Aufrufen verwendet wird.
Da dies OAuth Version 1 verwendet, müssen Sie die folgenden Schritte ausführen, um das Zugriffstoken zu erhalten :
Ich empfehle die Verwendung von Postman für die ersten Schritte, da diese nur einmal ausgeführt werden müssen. Postman wird auch den Griff zu erzeugen
timestamp
,nonce
undoauth signature
, also , wenn Sie nicht eine OAuth - Bibliothek verwenden, dann sollten Sie unbedingt Postman verwenden. Sobald Sie Ihr Access Token haben , können Sie die Anrufe über CURL ohne Bibliotheken tätigen.https://www.getpostman.com/
Erster Schritt (Setup-Anwendung)
Installiere das WP OAuth 1 Plugin, aktiviere es und gehe dann zum Menüpunkt unter Users> Applications . Neue Anwendung hinzufügen, Name und Beschreibung ausfüllen. Für einen Rückruf entweder die URL, zu der der Benutzer umgeleitet werden soll (nach der Autorisierung), oder
oop
für einen Out-of-Band-Fluss, der zu einer internen Seite umgeleitet wird, auf der das Prüfer-Token angezeigt wird (anstatt umzuleiten).https://github.com/WP-API/OAuth1/blob/master/docs/basics/Registering.md
Um mit dem zweiten Schritt fortzufahren, muss ein Anruf an Ihre Site mit der Client-ID und dem Client-Geheimnis der erstellten Anwendung getätigt werden , um temporäre Anmeldeinformationen (Request Token) abzurufen.
Öffnen Sie Postman, erstellen Sie einen neuen Anruf
http://website.com/oauth1/request
, klicken Sie auf die Registerkarte Autorisierung, wählen Sie OAuth 1.0 aus der Dropdown-Liste aus, geben Sie den Client-Schlüssel und das Client-Geheimnis ein, setzen Sie die Signaturmethode aufHMAC-SHA1
, aktivieren Sie das Hinzufügen von Parametern zum Header, codieren Sie die Signatur und klicken Sie dann auf AktualisierungsanforderungPostman generiert automatisch die Signatur, den Nonce und den Zeitstempel für Sie und fügt sie der Kopfzeile hinzu (Sie können sie auf der Registerkarte "Kopfzeilen" anzeigen).
Klicken Sie auf Senden , und Sie sollten eine Antwort erhalten, der folgendes beinhaltet
oauth_token
undoauth_token_secret
:Diese Werte werden im nächsten Schritt verwendet, um die Anwendung unter Ihrem WordPress-Benutzerkonto zu autorisieren.
Zweiter Schritt (Antrag genehmigen)
Der Autorisierungsschritt muss nur einmal ausgeführt werden. Dieser Schritt ist benutzerbezogen und jedem vertraut. Dieser Schritt ist erforderlich, da Sie OAuth1 verwenden und die Anwendung mit einem WordPress-Benutzerkonto verknüpft sein muss. Überlegen Sie, wann eine Website es Ihnen ermöglicht, sich mit Facebook anzumelden. Sie werden zu Facebook weitergeleitet, wo Sie sich anmelden und auf "Autorisieren" klicken. Dies muss nur über Ihre WordPress-Website erfolgen.
Ich empfehle, für diesen Schritt Ihren Webbrowser zu verwenden, da Sie einfach die Variablen in der URL festlegen können. Auf dieser Seite wird die Seite "Autorisieren" zum Autorisieren der Anwendung angezeigt.
Öffnen Sie Ihren Webbrowser und geben Sie die URL zu Ihrer Site wie folgt ein:
http://website.com/oauth1/authorize
Ergänzen Sie nun diese URL
oauth_consumer_key
(Client-ID)oauth_token
undoauth_token_secret
(aus dem vorherigen Schritt). In meinem Beispiel ist dies die vollständige URL:Sobald Sie auf Autorisieren klicken, wird ein weiterer Bildschirm mit dem Bestätigungstoken angezeigt. In meinem Beispiel ist dies das zurückgegebene Verifikationstoken
E0JnxjjYxc32fMr2AF0uWsZm
Dritter Schritt (Zugriffstoken abrufen)
Nachdem wir die Anwendung autorisiert haben, müssen wir einen letzten Aufruf durchführen, um das Autorisierungstoken abzurufen, das für alle API-Aufrufe verwendet wird. Genau wie im ersten Schritt verwende ich Postman (da die Signatur HMAC-SHA1 sein muss), und dies erleichtert die Durchführung dieser Schritte um das 100-fache.
Öffnen Sie Postman erneut und ändern Sie die URL in
http://website.com/oauth1/access
Stellen Sie sicher, dass Sie das Token und das Token Secret (Werte aus dem ersten Schritt) hinzufügen, und klicken Sie dann auf Params , um die Felder unter der URL anzuzeigen . Geben Sie links oauth_verifier ein und rechts den Code aus dem zweiten Schritt, dem Verification Token
Stellen Sie sicher, dass Sie auf Update Request und dann auf Send klicken, und Sie sollten eine Antwort mit
oauth_token
undoauth_token_secret
... erhalten. Dies ist, was Sie benötigen, um Ihre API-Aufrufe zu tätigen! Verwerfen Sie die Originale aus Schritt 1, speichern Sie diese in Ihrem Code oder an einem anderen sicheren Ort.Anschließend können Sie einen API-Aufruf an Ihre Site senden und die Header mit dem zurückgegebenen Token und dem Token-Geheimnis festlegen.
Sie können dies auf mehrere Arten über den Autorisierungsheader, in GET-Parametern oder POST (wenn als application / x-www-form-urlencoded codiert) übergeben. Denken Sie daran, dass Sie die Unterschrift, den Zeitstempel und den Nonce weitergeben MÜSSEN. Ich wusste nicht, wie lange diese Antwort dauern würde, also werde ich dies morgen mit einem Beispiel aktualisieren, um dies mit Ihrem Code zu tun.
Ich empfehle dringend, das Rest-API-Protokoll zu installieren, damit Sie das Protokoll der API-Aufrufe anzeigen und sehen können, was gesendet, zurückgegeben usw. wurde. Dies hilft beim Debuggen enorm.
https://github.com/petenelson/wp-rest-api-log
quelle
Fügen Sie dies als weitere Antwort hinzu, um herauszufinden, wie Sie dies tun können. Grundsätzlich MÜSSEN Sie, wie in meinen Kommentaren erwähnt, OAuth1 mit einem Benutzerkonto verknüpfen, um dies zu erreichen.
Zuerst müssen Sie CURL verwenden, um sich auf der Site mit einem Benutzernamen-Passwort für WordPress anzumelden. Speichern Sie das Cookie, damit Sie es in Ihrem CURL-Aufruf an OAuth verwenden können.
/programming/724107/wordpress-autologin-using-curl-or-fsockopen-in-php
Rufen Sie dann OAuth mit CURL mit der Client-ID und dem Client-Geheimnis an, um das temporäre Oauth-Token und -Geheimnis (Request Token) abzurufen.
Um diesen Anruf (und den Anruf zum Abrufen des Zugriffstokens) zu tätigen, müssen Sie Ihren CURL-Anruf korrekt einrichten. Code und Verweise finden Sie am Ende dieser Antwort.
Nachdem Sie das temporäre Oauth-Token und -geheimnis (Request Token) erhalten haben, rufen Sie mit CURL POST diese URL Ihrer Site auf:
http://website.com/oauth1/authorize
Anschließend müssen Sie alle Werte aus dem zurückgegebenen HTML-Code für die Autorisierungsseite abrufen und anschließend Ihren eigenen POST an die Formularaktions-URL senden.
/programming/35363815/how-to-get-a-value-input-from-html-returned-of-curl
Insbesondere müssen diese in Ihren POST-Daten enthalten sein, um die "Autorisierungs" -POST zu vervollständigen
http://domain.com/wp-login.php?action=oauth1_authorize
_wpnonce
- Dies ist der Nonce-Wert für das zu sendende Formular. Dieser muss aus der HTML-Eingabe entnommen und mit Ihrem POST gesendet werdenconsumer
- Dies ist eine versteckte Eingabe im HTML (dies ist ein Verweis auf eine Beitrags-ID, daher müssen Sie sie aus der HTML-Eingabe ziehenoauth_token
- Dies ist eine versteckte Eingabe im HTML (sollte aber auch schon vorhanden sein)wp-submit
- Dies muss auf den Wert gesetzt werdenauthorize
Hier ist ein Beispiel-HTML für die Authentifizierungsseite:
Nachdem Sie den POST mit all diesen Werten / Daten durchgeführt haben, ist dies der HTML-Code, der mit dem Autorisierungscode zurückgegeben wird (daher müssen Sie den Wert aus dem
<code>
Block ziehen:Sobald Sie über das Verifizierungstoken verfügen, können Sie die
/oauth1/access
Verwendung des Verifizierungstokens, des Oauth-Tokens und des Oauth-Token-Geheimnisses anrufen. Das Verifikationstoken muss in die POST-Daten als eingetragen werdenoauth_verifier
Damit erhalten Sie Ihr neues und permanentes Access Token und VOILA!
Beispiel CURL-Code
Im Folgenden finden Sie einen Beispielcode für den CURL-Aufruf. Der wichtigste Teil besteht darin, wie der CURL
oauth_signature
generiert wird:https://oauth1.wp-api.org/docs/basics/Signing.html
Auf dieser Site erfahren Sie genau, wie Sie die OAuth-Signatur codieren und mit CURL senden (ich empfehle, die gesamte Seite zu lesen): https://hannah.wf/twitter-oauth-simple-curl-requests-for-your-own- Daten/
Weitere Ressourcen zum Generieren der OAuth1-Signatur: /programming/24613277/oauth-signature-generation-using-hmac-sha1
Weitere Ressourcen: http://collaboradev.com/2011/04/01/twitter-oauth-php-tutorial/
quelle
oauth_signature
wie Sie gesagt haben, zu generieren , aber irgendwie ist die Antwort immerjson_oauth1_signature_mismatch
.Update: Nach dem, was ich gelesen habe, müssen Sie mehrere Locken machen, um das access_token zu erhalten, das Sie dann für die Abfrage verwenden
oauth1 Server Flow
quelle
Ich weiß, dass ich etwas spät dran bin, aber können Sie wp_remote_get und _post verwenden?
Ich rufe Inhalte mit meiner WordPress-Installation ab und poste sie mit ihnen:
Dies ist die allgemeine Idee aus dem WordPress-Codex:
Hier ist ein genaueres Beispiel:
Der Trick besteht darin, den Benutzernamen und pw zu codieren. Häufig bleibt die Zeit abhängig vom API-Benutzernamen und pw entweder leer oder es handelt sich um Ihre Token.
so waren zum Beispiel in meinem Beispiel oben die Überschriften
und ich ließ pw leer. Dies hängt jedoch vom verwendeten API-System ab.
quelle