WP REST-API Einrichten und Verwenden der Basisauthentifizierung

Im einleitenden Teil dieser Serie haben wir uns kurz mit der REST-Architektur befasst und wie sie uns dabei helfen kann, bessere Anwendungen zu erstellen. Anschließend haben wir die Geschichte der REST-APIs in WordPress untersucht und uns mit dem neuesten Zusatz vertraut gemacht: dem WP-REST-API-Plugin. Wir haben eine grundlegende Arbeitsumgebung zum Testen mit dem Plugin eingerichtet, die die Plugin-Installation und einen HTTP-Client zum Senden von Anforderungen oder zum Anzeigen der Serverantwort umfasst.

Im aktuellen Teil der Serie werden wir ein grundlegendes Authentifizierungsprotokoll auf dem Server einrichten, um authentifizierte Anforderungen zur Ausführung verschiedener Aufgaben über die REST-API zu senden.

Um genau zu sein, werden wir in diesem Teil:

  • Schauen Sie sich die verschiedenen verfügbaren Authentifizierungsmethoden an, wenn Sie das REST-API-Plugin verwenden
  • Richten Sie die Standardauthentifizierung auf dem Server ein
  • authentifizierte Anfrage mit Postman senden
  • authentifizierte Anfrage mit JavaScript-Framework senden
  • authentifizierte Anfrage über die Befehlszeile senden
  • authentifizierte Anfrage über WP HTTP API senden

Werfen wir doch einen Blick auf die Authentifizierung.

Was ist Authentifizierung??

Authentifizierung ist in ihrer grundlegendsten Definition der Identifizierungsprozess einer Person.

Laut Webopedia:

Das Identifizieren einer Person, normalerweise basierend auf einem Benutzernamen und einem Kennwort. In Sicherheitssystemen unterscheidet sich die Authentifizierung von der Autorisierung. Dabei handelt es sich um den Prozess, bei dem Einzelpersonen aufgrund ihrer Identität Zugriff auf Systemobjekte erhalten. Die Authentifizierung stellt lediglich sicher, dass die Person derjenige ist, der sie zu sein vorgibt, sagt jedoch nichts über die Zugriffsrechte der Person aus.

Bei der WP REST-API kann ein Benutzer mit ausreichenden Berechtigungen verschiedene CRUD-Aufgaben ausführen, z. B. einen Beitrag erstellen, alle Benutzer der Website abrufen oder die Rechte eines Benutzers widerrufen. Bei all diesen Aktionen muss man dem Server jedoch seine Identität beweisen, und hier spielt die Authentifizierung eine Rolle.

Ohne eine ordnungsgemäße Authentifizierung wäre es für jemanden mit böswilligen Ambitionen sehr leicht, sich mit der Site zu beschäftigen. Daher bietet die Authentifizierung eine notwendige Sicherheitsebene, um die Rechte eines Benutzers und die möglichen Aktionen einzuschränken.

Authentifizierung mit der WP-REST-API

Die WP-REST-API bietet drei Authentifizierungsoptionen, die jeweils für einen bestimmten Zweck vorgesehen sind. Diese Optionen sind:

  • grundlegende Authentifizierung
  • OAuth-Authentifizierung
  • Cookie-Authentifizierung

Die native Authentifizierungsmethode mit WordPress ist die Authentifizierung durch Cookies. So ermittelt WordPress die Identität eines Benutzers und welche Aktionen er ausführen kann. Um die beiden anderen oben aufgeführten Authentifizierungsmethoden mit der WP-REST-API zu verwenden, müssen Sie die entsprechenden Plugins installieren, die vom WP-REST-API-Team auf GitHub bereitgestellt werden. Hoffentlich werden diese beiden Methoden auch mit dem REST-API-Plugin selbst in den WordPress-Kern aufgenommen.

Die Standardauthentifizierung ist die grundlegendste Art der HTTP-Authentifizierung, bei der Anmeldeinformationen zusammen mit den Headern der Anforderung gesendet werden.

Funktionsweise der Basisauthentifizierung

Bei der Basisauthentifizierung fordert der Client eine URL an, die eine Authentifizierung erfordert. Der Server fordert den Client (oder den Benutzeragenten) auf, sich durch Senden von a zu authentifizieren 401-nicht autorisiert Code. Der Client sendet im Gegenzug dieselbe Anforderung, jedoch mit Anmeldeinformationen als Base64-kodierte Zeichenfolge im Format Benutzername Passwort. Diese Zeichenfolge wird im gesendet Genehmigung Kopffeld wie folgt:

Berechtigung: Basic base64_encode (Benutzername: Passwort)

Wenn also der Benutzername lautet tutsplus und das Passwort lautet 123456, Das folgende Headerfeld würde mit der Anfrage gesendet werden:

Berechtigung: Basic dHV0c3BsdXM6MTIzNDU2

Da der base64-codierte String leicht decodiert werden kann, ist diese Methode für die Verwendung in einem offenen Netzwerk sehr unsicher. Daher sollte diese Methode nur für Debugging- und Entwicklungszwecke verwendet werden, wenn die Verbindung zwischen Server und Client vertrauenswürdig ist.

Plugin installieren

Wie oben erwähnt, ist das Plugin auf GitHub vom WP REST API-Team verfügbar. Wir müssen es also nur in unserem klonen Plugins Verzeichnis und aktivieren Sie es.

Gehen Sie zu Ihrem / wp-content / plugins / Verzeichnis und klonen Sie das Plugin, das Sie möglicherweise benötigen Sudo Rechte zum Ausführen des Befehls. Geben Sie dazu Folgendes aus:

$ sudo git-Klon https://github.com/WP-API/Basic-Auth.git

Das Terminal fragt nach Ihrem Passwort. Geben Sie Ihr Passwort ein und lassen Sie das Repository in ein Verzeichnis klonen.

Aktivieren Sie das Plugin nach dem Klonen, indem Sie zu Ihrem WP-Administrator wechseln. Die grundlegende HTTP-Authentifizierungsmethode kann jetzt mit dem REST-API-Plugin verwendet werden.

Authentifizierte Anforderungen mit Postman senden

Die meisten HTTP-Clients unterstützen das systemeigene Senden einer Anfrage mit der Standardauthentifizierungsmethode. Dies gilt auch für Postman for Chrome. Um eine authentifizierte Anfrage zu senden, gehen Sie zu Genehmigung Registerkarte unter der Adressleiste:

Jetzt auswählen Basic Auth aus dem Dropdown-Menü. Sie werden aufgefordert, Ihren Benutzernamen und Ihr Passwort einzugeben. Klicken Sie nach der Eingabe Ihrer Anmeldeinformationen auf Anfrage aktualisieren Taste.

Nach dem Aktualisieren der Authentifizierungsoption wird eine Änderung in der angezeigt Kopfzeilen und enthält jetzt ein Headerfeld, das den codierten Benutzernamen und die Kennwortzeichenfolge enthält:

Es geht darum, wie wir die grundlegende Authentifizierung mit Postman einrichten. Jetzt können Sie eine Testanfrage senden, z. B. einen Beitrag löschen, für den eine Authentifizierung erforderlich ist:

LÖSCHEN Sie http: // dev-server / wp-json / wp / v2 / posts / 52

Woher Dev-Server ist der Pfad zu Ihrem Entwicklungsserver.

Wenn alles gut geht, gibt der Server eine 200 OK Statuscode, der angibt, dass der Beitrag mit einer ID von 52 wurde gelöscht:

Machen Sie sich keine Sorgen über die Anfrage, die wir hier gestellt haben - wir werden sie in den zukünftigen Teilen der Serie ausführlicher durcharbeiten.

Senden authentifizierter Anforderungen über die Befehlszeile

Wir können die Befehlszeile verwenden, um authentifizierte Anforderungen mit dieser Methode zu senden. Folgendes berücksichtigen locken Äquivalent der obigen Anfrage:

curl --request DELETE -I --user admin: Kennwort http: // dev-server / wp-json / wp / v2 / posts / 52

Die folgende Antwort wird vom Server gesendet und zeigt an, dass alles in Ordnung ist:

HTTP / 1.1 200 OK Datum: Fr, 28 Aug 2015 20:02:43 GMT Server: Apache / 2.4.6 (CentOS) PHP / 5.6.12 X-Powered-By: PHP / 5.6.12 Set-Cookie: PHPSESSID = k0rg6mcbsie7ufvoav219lqre0; Pfad = / Verfällt: Do, 19 Nov 1981 08:52:00 GMT Cache-Control: Kein Speichern, kein Cache, Muss-Revalidierung, Post-Check = 0, Pre-Check = 0 Pragma: Kein Cache X- Content-Type-Optionen: nosniff Link: ; rel = "alternate"; type = text / html Erlauben: GET, POST, PUT, PATCH, DELETE Übertragungscodierung: chunked Content-Type: application / json; Zeichensatz = UTF-8

Das --anfordern Option gibt die zu verwendende Anforderungsmethode an, die in unserem Fall ist LÖSCHEN. Sie können auch verwenden -X als Alternative zum --anfordern Möglichkeit.

Das -ich Diese Option ruft nur die vom Server gesendeten HTTP-Header ab. Die Alternative zu -ich ist der --Kopf Möglichkeit.

Authentifizierte Anfragen mit JavaScript senden

Wenn Sie ein clientseitiges JavaScript-Framework wie jQuery verwenden, um mit einer WordPress-Site mit aktivierter WP-API remote zu interagieren, können Sie die Autorisierungsheader in einer AJAX-Anfrage senden. Folgendes berücksichtigen LÖSCHEN Anfrage gesendet durch jQuery.ajax () Methode:

$ .ajax (url: 'http: // dev-server / wp-json / wp / v2 / posts / 52', Methode: 'DELETE', crossDomain: true, beforeSend: function (xhr) xhr.setRequestHeader ( 'Authorization', 'Basic' + Base64.encode ('Benutzername: Kennwort'));, success: function (data, txtStatus, xhr) console.log (data); console.log (xhr.status); );

Woher Base64 ist ein Objekt, das zum Codieren und Decodieren einer base64-Zeichenfolge verwendet wird. Es ist wie folgt definiert, vor dem oben jQuery.ajax () Methodenaufruf:

var Base64 = _ keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 + / =", encode: function (e) var; var n, r, i, s, o, a; var; während (f> 2; o = (n & 3)<<4|r>> 4; u = (r & 15)<<2|i>> 6; a = i&63;if (isNaN (r)) u = a = 64, sonst wenn (isNaN (i)) a = 64 t = t + this._keyStr.charAt (s) + this._keyStr.charAt (o) + this ._keyStr.charAt (u) + this._keyStr.charAt (a) return t, decode: Funktion (e) var; var n, r, i; var s, o, u, a; var f = 0 ; e = e.replace (/ [^ A-Za-z0-9 \ + \ / \ =] / g, ""); während (f> 4; r = (o & 15)<<4|u>> 2; i = (u & 3)<<6|a;t=t+String.fromCharCode(n);if(u!=64)t=t+String.fromCharCode(r)if(a!=64)t=t+String.fromCharCode(i)t=Base64._utf8_decode(t);return t,_utf8_encode:function(e)e=e.replace(/\r\n/g,"\n");var;for(var n=0;n127 & amp;<2048)t+=String.fromCharCode(r>> 6 | 192); t + = String.fromCharCode (r & 63 | 128) else t + = String.fromCharCode (r >> 12 | 224); t + = String.fromCharCode (r >> 6 & 63 | 128); t + = String .vonCharCode (r & 63 | 128) Rückgabe von t, _ utf8_decode: Funktion (e) var; var n = 0; var r = c1 = c2 = 0;191 && r<224)c2=e.charCodeAt(n+1);t+=String.fromCharCode((r&31)<<6|c2&63);n+=2elsec2=e.charCodeAt(n+1);c3=e.charCodeAt(n+2);t+=String.fromCharCode((r&15)<<12|(c2&63)<<6|c3&63);n+=3return t;

Ich habe es in StackOverflow gefunden und es ist eine Cross-Browser-Methode zum Codieren und Decodieren einer base64-Zeichenfolge in JavaScript.

In der obigen Anfrage setzen wir die Genehmigung Header mit der setRequestHeader () Methode der xhr Objekt als Argument an den übergeben beforeSend () Methode.

Zusätzlich zu der oben genannten Anfrage wird die Access-Control-Allow-Header Header sollten das zulassen Genehmigung Feld auf dem Server. Dies kann durch Hinzufügen der folgenden Codezeile in Ihre WordPress-.htaccess-Datei aktiviert werden:

Header immer gesetzt Access-Control-Allow-Header Berechtigungsheader immer gesetzt

Wenn die obige Anfrage abgeschlossen ist, wird die Antwort in der Konsole Ihres Browsers ausgegeben, wie in der folgenden Abbildung dargestellt:

Das 200 Der vom Server zurückgegebene Statusantwortcode zeigt an, dass der Beitrag mit der ID 52 wurde erfolgreich gelöscht.

Senden authentifizierter Anforderungen mithilfe der WP HTTP-API

Wenn Sie von einer WordPress-Installation aus mit einer anderen WordPress-Site kommunizieren, können Sie HTTP-Anforderungen am besten über die WP-HTTP-API senden.

Betrachten Sie den folgenden Code, der eine sendet LÖSCHEN Anforderung an eine andere WordPress-Installation mit aktivierter WP-REST-API und Standardauthentifizierung:

$ wp_request_headers = array ('Authorization' => 'Basic'. base64_encode ('username: password')); $ wp_request_url = 'http: // localserver / wordpress-api / wp-json / wp / v2 / posts / 52'; $ wp_delete_post_response = wp_remote_request ($ wp_request_url, array ('method' => 'DELETE', 'headers' => $ wp_request_headers)); echo wp_remote_retrieve_response_code ($ wp_delete_post_response). ". wp_remote_retrieve_response_message ($ wp_delete_post_response);

Hier haben wir die verwendet wp_remote_request () Funktion, die zwei Argumente akzeptiert:

  • $ url: die URL der Anfrage
  • $ args: ein Array zusätzlicher Argumente, die übergeben werden sollen

Das $ -Methode definiert in der $ args Array ist LÖSCHEN, und es sollte immer in Großbuchstaben geschrieben werden. Das $ Kopfzeilen Array nimmt Schlüsselwertpaare aller Header-Felder an, die mit der Anforderung übergeben werden sollen. Wir haben die bestanden Genehmigung Schlüssel mit einem base64-codierten Benutzernamen und einer Kennwortzeichenfolge als Wert.

Die Antwort würde im gespeichert werden $ wp_delete_post_response Variable, die wir mit verwenden können wp_remote_retrieve_response_code () und wp_remote_retrieve_response_message () Funktionen. Diese beiden Funktionen sind Hilfsfunktionen in der WP-HTTP-API und extrahieren jeweils den Statuscode und die Statusmeldung aus der Antwort.

Wenn der Beitrag durch die obige Anforderung erfolgreich gelöscht wurde, wird der folgende Text ausgegeben:

200 OK

Das ist alles über die grundlegende Authentifizierungsmethode, die von der WP REST-API unterstützt wird. Wir werden in unseren zukünftigen Teilen dieselbe Authentifizierungsmethode verwenden, um Daten abzurufen, zu erstellen oder zu ändern, da dies nicht der Fall ist.

Fazit

Im aktuellen Teil der Serie haben wir die grundlegende Methode der HTTP-Authentifizierung, die von der WP REST-API unterstützt wird, genau unter die Lupe genommen. Es sollte jedoch nicht in Live-Produktionsumgebungen verwendet werden, da der base64-codierte String leicht decodiert werden kann und Ihre Anmeldeinformationen in die falschen Hände geraten können.

Nachdem wir die grundlegende HTTP-Authentifizierungsmethode erfolgreich eingerichtet und getestet haben, können wir noch einen Schritt weiter gehen und eine anspruchsvollere Art der Authentifizierung einrichten - die OAuth 1.0a-Methode. Wir werden das im nächsten Teil der Serie tun, also bleibt dran!