WP REST API Konfigurera och använda grundläggande autentisering

I den inledande delen av denna serie hade vi en snabb uppdatering på REST-arkitekturen och hur det kan hjälpa oss att skapa bättre applikationer. Vi undersökte sedan REST API: ers historia i WordPress och presenterade oss för det senaste tillägget: WP REST API-plugin. Vi inrättade en grundläggande arbetsmiljö för testning med plugin, som inkluderade plugininstallation och en HTTP-klient för att skicka förfrågningar eller se serverns svar.

I den nuvarande delen av serien kommer vi att skapa ett grundläggande autentiseringsprotokoll på servern för att skicka autentiserade förfrågningar för att utföra olika uppgifter via REST API.

För att vara specifik, i denna del kommer vi att:

  • titta på olika autentiseringsmetoder som finns tillgängliga när du använder pluginprogrammet REST API
  • konfigurera grundläggande autentisering på servern
  • skicka autentiserad begäran med Postman
  • skicka autentiserad förfrågan med hjälp av JavaScript-ramverket
  • skicka autentiserad förfrågan med kommandoraden
  • skicka autentiserad begäran med WP HTTP API

Men låt oss först titta på autentiseringen själv.

Vad är autentisering?

I sin mest grundläggande definition är autentisering processen att bestämma en persons identitet.

Enligt Webopedia:

Processen att identifiera en individ, vanligtvis baserat på användarnamn och lösenord. I säkerhetssystem skiljer sig autentisering från tillstånd, vilket är processen att ge individer tillgång till systemobjekt baserat på deras identitet. Autentisering garanterar bara att individen är den som han eller hon påstår att vara, men säger ingenting om individens behörighet.

När du pratar om WP REST API kan en användare med tillräckliga behörigheter utföra olika CRUD-uppgifter som att skapa ett inlägg, hämta alla användare av webbplatsen eller återkalla användarens rättigheter. Men för alla dessa åtgärder måste man bevisa sin identitet på servern, och det är där autentisering spelar sin roll.

Utan korrekt autentisering skulle det vara väldigt lätt för någon med skrämmande ambitioner att röra sig med webbplatsen, så autentisering ger ett nödvändigt säkerhetsskikt för att begränsa användarens rättigheter och de åtgärder som kan utföras.

Autentisering Med WP REST API

WP REST API innehåller tre alternativ för autentisering, var och en avsedd för ett visst syfte. Dessa alternativ är:

  • grundläggande autentisering
  • OAuth-autentisering
  • kakautentisering

Just nu är det ursprungliga sättet att verifiera med WordPress autentisering av cookies. Så här bestämmer WordPress identiteten för en användare och vilka åtgärder den kan utföra. För att använda de andra två autentiseringsmetoderna ovan med WP REST API måste vi installera respektive plugin-program som tillhandahålls av WP REST API-laget tillgängligt på GitHub. Förhoppningsvis kommer dessa två metoder också att inkluderas i WordPress-kärnan med själva REST API-plugin.

Grundläggande autentisering är den vanligaste typen av HTTP-autentisering, där inloggningsuppgifter skickas tillsammans med rubrikerna för begäran.

Hur grundläggande autentisering fungerar

Vid grundläggande autentisering begär kunden en webbadress som kräver autentisering. Servern begär att klienten (eller användaragenten) verifierar sig genom att skicka en 401-Ej godkänd koda. Klienten returnerar i gengäld samma begäran men med inloggningsuppgifter som en bas64 kodad sträng i formatet användarnamn Lösenord. Denna sträng skickas i Tillstånd rubrikfält som följande:

Auktorisation: Grundläggande base64_encode (användarnamn: lösenord)

Så om användarnamnet är tutsplus och lösenordet är 123456, Följande rubrikfält skulle skickas med begäran:

Tillstånd: Grundläggande dHV0c3BsdXM6MTIzNDU2

Eftersom den kodade strängen bas64 enkelt kan avkodas är denna metod mycket osäker för att användas på ett öppet nätverk. Därför bör denna metod endast användas för felsökning och utvecklingsändamål när anslutningen mellan servern och klienten är betrodd.

Installera plugin

Som nämnts ovan är pluginet tillgängligt på GitHub från WP REST API-laget. Så allt vi behöver göra är att klona det i vårt plugin-program katalog och aktivera den.

Gå över till din / Wp-content / plugins / katalog och klon plugin som du kan behöva sudo rättigheter att köra kommandot. Gör så här om du vill göra följande:

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

Terminalen kommer att be om ditt lösenord. Ange ditt lösenord och låt förvaret klonas i en katalog.

Efter att du klonat plugin aktiverar du det genom att gå till din WP Admin. Den grundläggande HTTP-autentiseringsmetoden kan nu användas med pluginprogrammet REST API.

Skickar verifierade förfrågningar med postman

De flesta HTTP-klienter stöder att skicka en förfrågan med den grundläggande autentiseringsmetoden, och det gör också Postman for Chrome. För att skicka en autentiserad förfrågan, gå till Tillstånd fliken nedanför adressfältet:

Välj nu Grundläggande Auth från rullgardinsmenyn. Du kommer att bli ombedd att ange ditt användarnamn och lösenord. Efter att du har skrivit in dina uppgifter, klicka på Uppdateringsförfrågan knapp.

Efter uppdatering av autentiseringsalternativet visas en ändring i rubriker fliken och innehåller nu ett rubrikfält som innehåller det kodade användarnamnet och lösenordssträngen:

Det handlar om hur vi sätter upp grundläggande autentisering med Postman. Nu kan du skicka en testförfrågan som att ta bort ett inlägg, vilket kräver autentisering:

DELETE http: // dev-server / wp-json / wp / v2 / inlägg / 52

Var dev-server är vägen till din utvecklingsserver.

Om allt går bra kommer servern att returnera en 200 OK statuskod, vilket indikerar att posten med ett ID på 52 har blivit raderad:

Oroa dig inte för den förfrågan vi gjort här - vi kommer att gå igenom det mer i detalj i framtida delar av serien.

Skickar verifierade förfrågningar från kommandoraden

Vi kan använda kommandoraden för att skicka autentiserade förfrågningar med den här metoden. Tänk på följande ringla motsvarande ovannämnda begäran:

curl --request DELETE -I - användaradministratör: lösenord http: // dev-server / wp-json / wp / v2 / inlägg / 52

Följande svar skulle skickas av servern, vilket indikerar att allt är okej:

HTTP / 1.1 200 OK Datum: fre, 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; Steg = / Förfaller: Tis, 19 Nov 1981 08:52:00 GMT Cache-Control: No-Store, No-Cache, måste-revalidera, post-check = 0, pre-check = 0 Pragma: No-Cache X- Content-Type-Options: nosniff Länk: ; rel = "alternate"; typ = text / html Tillåt: GET, POST, PUT, PATCH, DELETE Överförings-kodning: chunked Innehållstyp: application / json; charset = UTF-8

De --begäran alternativet anger vilken förfrågningsmetod som ska användas, vilket i vårt fall är RADERA. Du kan också använda -X som en suppleant till --begäran alternativ.

De -jag alternativ hämtar bara HTTP-rubrikerna som skickas av servern. Alternat till -jag är --huvud alternativ.

Skickar verifierade förfrågningar med hjälp av JavaScript

Om du använder en JavaScript-ram på klientsidan, till exempel jQuery, för att interagera med en WordPress-webbplats som har WP API aktiverat, kan du skicka behörighetsrubrikerna i en AJAX-förfrågan. Tänk på följande RADERA begäran skickad via jQuery.ajax () metod:

$ .ajax (url: 'http: // dev-server / wp-json / wp / v2 / inlägg / 52', metod: 'DELETE', crossDomain: true, beforeSend: funktion (xhr) xhr.setRequestHeader 'Authorization', 'Basic' + Base64.encode ('användarnamn: lösenord')), framgång: funktion (data, txtStatus, xhr) console.log (data); console.log (xhr.status); );

Var Base64 är ett objekt som används för kodning och avkodning av en base64-sträng. Det definieras enligt följande före ovanstående jQuery.ajax () metodsamtal:

var Base64 = _ keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 + / =", kod: funktion (e) var; var n, r, i, s, o, u, a; var f = 0; e = Base64._utf8_encode (e); while (f> 2; o = (n & 3)<<4|r>> 4; u = (r & 15)<<2|i>> 6, a = i&63;om (isNaN (r)) u = a = 64 annars om (isNaN (i)) a = 64 t = t + this._keyStr.charAt (s) + this._keyStr.charAt (o) + detta .junk ; e = e.replace (/ [^ A-Za-z0-9 \ + \ / \ =] / g, ""); while (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 && r<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 .fromCharCode (r & 63 | 128) returnera 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;

Jag hittade den på StackOverflow, och det är en kors webbläsare sätt att koda och avkoda en base64-sträng i JavaScript.

I ovanstående förfrågan ställer vi in Tillstånd rubrik med hjälp av setRequestHeader () metod för XHR objekt som passerat som argument till beforeSend () metod.

Förutom ovanstående begäran, Åtkomst-Control-allow-rubriker rubriker ska tillåta Tillstånd fält på servern. Detta kan aktiveras genom att lägga till följande rad kod i din WordPress .htaccess-fil:

Header alltid inställd Access-Control-Allow-Headers-behörighetsrubrik anges alltid

Ovanstående förfrågan, när den är klar, kommer att echo svaret i din webbläsares konsol som visas i bilden nedan:

De 200 statusresponskod returnerad av servern visar att posten med ett ID på 52 har tagits bort framgångsrikt.

Skickar verifierade förfrågningar med WP HTTP API

Om du interagerar med en annan WordPress-webbplats från din WordPress-installation, är det lämpligaste sättet att skicka HTTP-förfrågningar WP HTTP API.

Tänk på följande kod som skickar en RADERA begära att en annan WordPress-installation med WP REST API och grundläggande autentisering aktiveras:

$ wp_request_headers = array ('Authorization' => 'Basic'. base64_encode ('användarnamn: lösenord')); $ wp_request_url = 'http: // localserver / wordpress-api / wp-json / wp / v2 / inlägg / 52'; $ wp_delete_post_response = wp_remote_request ($ wp_request_url, array ('metod' => 'DELETE', 'headers' => $ wp_request_headers)); echo wp_remote_retrieve_response_code ($ wp_delete_post_response). ".wp_remote_retrieve_response_message ($ wp_delete_post_response);

Här använde vi wp_remote_request () funktion som accepterar två argument:

  • $ url: URL: n för begäran
  • $ args: en rad ytterligare argument som ska överföras

De $ metod definierad i $ args array är RADERA, och det ska alltid skrivas i stor bokstav. De $ headers array tar nyckelvärdespar av alla rubrikfält som ska skickas med begäran. Vi har passerat Tillstånd nyckeln med ett bas64 kodat användarnamn och lösenordssträng som sitt värde.

Svaret skulle sparas i $ wp_delete_post_response variabel, som vi kan använda med wp_remote_retrieve_response_code () och wp_remote_retrieve_response_message () funktioner. Dessa två funktioner är hjälparfunktioner i WP HTTP API, och de extraherar statuskoden och statusmeddelandet från respektive svar.

Om posten raderas framgångsrikt med ovanstående förfrågan kommer följande text att echoed ut:

200 OK

Det handlar om den grundläggande autentiseringsmetoden som stöds av WP REST API. Vi använder samma autentiseringsmetod i våra framtida delar för att hämta, skapa eller ändra data på grund av dess enkelhet, om inte annat anges.

Slutsats

I den nuvarande delen av serien tittade vi noga på den grundläggande HTTP-autentiseringsmetoden som stöds av WP REST API. Det bör dock inte användas i levande produktionsmiljöer på grund av att den kodade strängen bas64 enkelt kan avkodas och dina uppgifter kan falla i fela händer.

Efter att ha lyckats konfigurera och testa HTTPs grundläggande autentiseringsmetod är vi redo att ta ett steg längre och skapa ett mer sofistikerat sätt att verifiera OAuth 1.0a-metoden. Vi kommer att göra det i nästa serie, så håll dig uppdaterad!