WP REST API Sette opp og bruke grunnleggende godkjenning

I introduksjonsdelen av denne serien hadde vi en rask oppdatering på REST-arkitekturen, og hvordan den kan hjelpe oss med å skape bedre applikasjoner. Vi undersøkte deretter historien til REST APIs i WordPress og introduserte oss til det siste tillegget: WP REST API-plugin. Vi opprettet et grunnleggende arbeidsmiljø for testing med plugin, som inkluderte plugininstallasjon og en HTTP-klient for å sende forespørsler eller vise serverresponsen.

I den nåværende delen av serien vil vi sette opp en grunnleggende godkjenningsprotokoll på serveren for å sende autentiserte forespørsler for å utføre ulike oppgaver via REST API.

For å være spesifikk, i denne delen vil vi:

  • se på forskjellige autentiseringsmetoder som er tilgjengelige når du bruker REST API-plugin
  • sett opp grunnleggende godkjenning på serveren
  • Send godkjent forespørsel ved hjelp av Postman
  • Send godkjent forespørsel ved hjelp av JavaScript-rammeverket
  • send autentisert forespørsel ved hjelp av kommandolinje
  • Send godkjent forespørsel ved hjelp av WP HTTP API

Men la oss først se på autentiseringen selv.

Hva er godkjenning?

I sin mest grunnleggende definisjon er autentisering prosessen med å bestemme identiteten til en person.

Ifølge Webopedia:

Prosessen med å identifisere et individ, vanligvis basert på et brukernavn og passord. I sikkerhetssystemer er autentisering forskjellig fra autorisasjon, som er prosessen med å gi enkeltpersoner tilgang til systemobjekter basert på deres identitet. Autentisering sikrer bare at personen er som han eller hun hevder å være, men sier ingenting om individets adgangsrettigheter.

Når du snakker om WP REST API, kan en bruker med tilstrekkelige privilegier utføre ulike CRUD-oppgaver som å skape et innlegg, hente alle brukerne av nettstedet eller tilbakekalle rettighetene til en bruker. Men for alle disse handlingene må man bevise sin identitet til serveren, og det er her autentisering spiller sin rolle.

Uten riktig autentisering ville det være veldig enkelt for noen med vanskelige ambisjoner å rote rundt på nettstedet, så autentisering gir et nødvendig sikkerhetsnivå for å begrense rettighetene til en bruker og handlingene som kan utføres.

Autentisering Med WP REST API

WP REST API gir tre alternativer for autentisering, hver beregnet til et bestemt formål. Disse alternativene er:

  • grunnleggende godkjenning
  • OAuth-autentisering
  • cookie-autentisering

Foreløpig er den opprinnelige måten å autentisere med WordPress, godkjenning av informasjonskapsler. Slik bestemmer WordPress identiteten til en bruker og hvilke handlinger den kan utføre. For å bruke de to andre autentiseringsmetodene som er oppført ovenfor med WP REST API, må vi installere de respektive pluginene som tilbys av WP REST API-teamet som er tilgjengelig på GitHub. Forhåpentligvis vil disse to metodene også bli inkludert i WordPress-kjernen med selve REST API-plugin-modulen.

Grunnleggende autentisering er den mest grunnleggende typen HTTP-godkjenning, der påloggingsinformasjonen sendes sammen med overskriftene til forespørselen.

Hvordan Basic Authentication Works

Ved grunnleggende godkjenning ber kunder om en nettadresse som krever godkjenning. Serveren ber klienten (eller brukeragenten) å autentisere seg ved å sende en 401-ikke godkjent kode. Klienten returnerer i return, samme forespørsel, men med påloggingsinformasjon som en base64 kodet streng i formatet brukernavn passord. Denne strengen er sendt i Autorisasjon topptekstfelt som følgende:

Autorisasjon: Grunnleggende base64_encode (brukernavn: passord)

Så hvis brukernavnet er tutsplus og passordet er 123456, Følgende overskriftsfelt vil bli sendt med forespørselen:

Autorisasjon: Grunnleggende dHV0c3BsdXM6MTIzNDU2

Siden basen64 kodet streng enkelt kan dekodes, er denne metoden svært usikker på bruk i et åpent nettverk. Derfor må denne metoden bare brukes til feilsøkings- og utviklingsformål når forbindelsen mellom serveren og klienten er klarert.

Installere plugin

Som nevnt ovenfor er pluginet tilgjengelig på GitHub fra WP REST API-teamet. Så alt vi trenger å gjøre er å klone det i vår plugins katalog og aktiver den.

Gå over til din / Wp-content / plugins / mappe og klone pluginet som du kanskje trenger sudo rettigheter til å kjøre kommandoen. For å gjøre dette, utsted følgende:

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

Terminalen vil be om passordet ditt. Skriv inn passordet ditt og la depotet klones inn i en katalog.

Etter å ha klonet pluginet, aktiver det ved å gå til WP Admin. Den grunnleggende HTTP-autentiseringsmetoden kan nå brukes med REST API-plugin.

Sende godkjente forespørsler ved hjelp av Postman

De fleste HTTP-klienter støtter å sende en forespørsel ved hjelp av den grunnleggende godkjenningsmetoden, og det gjør også Postman for Chrome. For å sende en godkjent forespørsel, gå til Autorisasjon kategorien under adressefeltet:

Velg nå Grunnleggende Auth fra rullegardinmenyen. Du vil bli bedt om å skrive inn brukernavn og passord. Etter at du har skrevet inn legitimasjonene dine, klikker du på Oppdateringsforespørsel knapp.

Etter oppdatering av autentiseringsalternativet, vil du se en endring i overskrifter fanen, og den inneholder nå et overskriftsfelt som inneholder det kodede brukernavnet og passordstrengen:

Det handler om hvordan vi oppretter grunnleggende godkjenning med Postman. Nå kan du sende en testforespørsel som å slette et innlegg, som krever godkjenning:

SLETT http: // dev-server / wp-json / wp / v2 / innlegg / 52

Hvor dev-serveren er banen til utviklingsserveren din.

Hvis alt går bra, vil serveren returnere en 200 OK statuskode, som indikerer at innlegget med et ID på 52 har blitt slettet:

Ikke vær bekymret for forespørselen vi laget her - vi vil gå gjennom det mer detaljert i fremtidens deler av serien.

Sende godkjente forespørsler fra kommandolinjen

Vi kan bruke kommandolinjen til å sende godkjente forespørsler ved hjelp av denne metoden. Vurder følgende curl tilsvarer ovennevnte forespørsel:

curl --request DELETE -I - bruker admin: passord http: // dev-server / wp-json / wp / v2 / innlegg / 52

Følgende svar vil bli sendt av serveren, som indikerer at alt er greit:

HTTP / 1.1 200 OK Dato: 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; Sti = / Utløper: Tue, 19 Nov 1981 08:52:00 GMT Cache-Control: No-Store, No-Cache, Må-revalidere, Post-Check = 0, Pre-Check = 0 Pragma: No-Cache X- Innhold-Type-Valg: Nosniff Link: ; rel = "alternative"; type = tekst / html Tillat: GET, POST, PUT, PATCH, DELETE Overførings-koding: chunked Content-Type: application / json; charset = UTF-8

De --be om alternativet angir forespørselsmetoden som skal brukes, som i vårt tilfelle er SLETT. Du kan også bruke -X som en alternativ til --be om alternativ.

De -Jeg alternativet henter bare HTTP-overskriftene som sendes av serveren. Den alternative til -Jeg er den --hode alternativ.

Sende godkjente forespørsler ved hjelp av JavaScript

Hvis du bruker en JavaScript-ramme på klientsiden, for eksempel jQuery, for å kommunisere eksternt med et WordPress-nettsted som har WP API aktivert, kan du sende autorisasjonshodene i en AJAX-forespørsel. Vurder følgende SLETT forespørsel sendt gjennom jQuery.ajax () metode:

$ .ajax (url: 'http: // dev-server / wp-json / wp / v2 / innlegg / 52', metode: 'DELETE', crossDomain: true, beforeSend: funksjon (xhr) xhr.setRequestHeader 'Authorization', 'Basic' + Base64.encode ('brukernavn: passord')), suksess: funksjon (data, txtStatus, xhr) console.log (data); console.log (xhr.status); );

Hvor Base64 er et objekt som brukes til koding og dekoding av en base64-streng. Det er definert som følger, før det ovenfor jQuery.ajax () metodeanrop:

var Base64 = _ keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 + / =", kode: funksjon (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, en = i&63;hvis (isNaN (r)) u = a = 64 annet hvis (isNaN (i)) a = 64 t = t + this._keyStr.charAt + dette._keyStr.charAt (o) + dette ._keyStr.charAt (u) + this._keyStr.charAt (a) retur t, avkode: funksjon (e) var; var n, r, i; var s, o, u, a; var f = 0 ; e = e.replace (/ [^ A-Za-Z0-9 \ + \ / \ =] / g, ""), mens (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 .fraCharCode (r & 63 | 128) retur t, _ utf8_decode: funksjon (e) var; var n = 0; var r = c1 = c2 = 0; mens191 && 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;

Jeg fant den på StackOverflow, og det er en kryssleser måte å kode og dekoding en base64 streng i JavaScript.

I ovennevnte forespørsel setter vi inn Autorisasjon header ved hjelp av setRequestHeader () metode av XHR objekt bestått som et argument til beforeSend () metode.

I tillegg til ovennevnte forespørsel, vil Tilgang-Control-La-topper overskrifter skal tillate Autorisasjon feltet på serveren. Dette kan aktiveres ved å legge til følgende linje med kode i WordPress. Htaccess-filen:

Header alltid satt Access-Control-Allow-Headers Autorisasjonsoverskrift er alltid angitt

Ovennevnte forespørsel, når den er ferdig, vil ekko ut svaret i nettleserens konsoll som vist på figuren nedenfor:

De 200 statusresponskoden returnert av serveren viser at innlegget med et ID på 52 har blitt slettet med hell.

Sende godkjente forespørsler ved hjelp av WP HTTP API

Hvis du interagerer eksternt med et annet WordPress-nettsted fra WordPress-installasjonen, er den mest hensiktsmessige måten å sende HTTP-forespørsler WP HTTP API.

Vurder følgende kode som sender en SLETT forespørsel til en annen WordPress-installasjon med WP REST API og grunnleggende godkjenning aktivert:

$ wp_request_headers = array ('Authorization' => 'Basic'. base64_encode ('brukernavn: passord')); $ wp_request_url = 'http: // localserver / wordpress-api / wp-json / wp / v2 / innlegg / 52'; $ wp_delete_post_response = wp_remote_request ($ wp_request_url, array ('metode' => 'DELETE', 'headers' => $ wp_request_headers)); ekko wp_remote_retrieve_response_code ($ wp_delete_post_response). ".wp_remote_retrieve_response_message ($ wp_delete_post_response);

Her brukte vi wp_remote_request () funksjon som aksepterer to argumenter:

  • $ url: URL til forespørselen
  • $ args: En rekke flere argumenter som skal bestås

De $ metode definert i $ args array er SLETT, og det skal alltid skrives i store bokstaver. De $ overskrifter array tar nøkkelverdierpar av alle toppfeltene som skal sendes med forespørselen. Vi har passert Autorisasjon nøkkel med en base64 kodet brukernavn og passord streng som sin verdi.

Svaret vil bli lagret i $ wp_delete_post_response variabel, som vi kan bruke med wp_remote_retrieve_response_code () og wp_remote_retrieve_response_message () funksjoner. Disse to funksjonene er hjelpefunksjoner i WP HTTP API, og de trekker ut statuskoden og statusmeldingen fra svaret.

Hvis innlegget slettes med suksess ved ovennevnte forespørsel, vil følgende tekst bli ekkoet ut:

200 OK

Det handler om den grunnleggende godkjenningsmetoden som støttes av WP REST API. Vi vil bruke samme autentiseringsmetode i våre fremtidige deler for å hente, opprette eller endre data på grunn av sin enkelhet, med mindre annet er nevnt.

Konklusjon

I den nåværende delen av serien så vi nøye på den grunnleggende HTTP-autentiseringsmetoden støttet av WP REST API. Det bør imidlertid ikke brukes i levende produksjonsmiljøer på grunn av at basen64 kodet streng lett kunne dekodes og legitimasjonene dine kan falle i feil hender.

Etter å ha vellykket opprettet og testet HTTPs grunnleggende godkjenningsmetode, er vi klare til å ta et skritt videre og sette opp en mer sofistikert måte å godkjenne - OAuth 1.0a-metoden. Vi vil gjøre det i den aller neste delen av serien, så hold deg innstilt!