WP REST API Configurarea și utilizarea autentificării de bază

În partea introductivă a acestei serii, am avut o reîmprospătare rapidă asupra arhitecturii REST și cum ne poate ajuta să creăm aplicații mai bune. Apoi am explorat istoria API-urilor REST în WordPress și ne-am prezentat la ultima adăugare: pluginul WP REST API. Am creat un mediu de lucru de bază pentru testarea cu plugin-ul, care a inclus instalarea pluginului și un client HTTP pentru trimiterea de cereri sau vizualizarea răspunsului serverului.

În partea curentă a seriei vom seta un protocol de autentificare de bază pe server pentru a trimite solicitări autentificate pentru a efectua diverse activități prin API-ul REST.

Pentru a fi specific, în această parte vom:

  • consultați diferitele metode de autentificare disponibile când utilizați pluginul REST API
  • configurați autentificarea de bază pe server
  • trimiteți o cerere autentificată folosind Postman
  • trimiteți o cerere autentificată utilizând cadrul JavaScript
  • trimiteți o cerere autentificată utilizând linia de comandă
  • trimiteți o cerere autentificată utilizând WP HTTP API

Dar să aruncăm o privire la autentificarea însăși.

Ce este autentificarea?

În definiția sa cea mai de bază, autentificarea este procesul de determinare a identității unei persoane.

Potrivit Webopedia:

Procesul de identificare a unui individ, de obicei bazat pe un nume de utilizator și o parolă. În sistemele de securitate, autentificarea este distinctă de autorizare, care este procesul de a da accesul persoanelor la obiectele de sistem bazate pe identitatea lor. Autentificarea se asigură doar că individul este persoana pe care o pretinde a fi, dar nu spune nimic despre drepturile de acces ale individului.

Când vorbim despre WP REST API, un utilizator cu suficiente privilegii poate efectua diverse sarcini CRUD, cum ar fi crearea unui mesaj, recuperarea tuturor utilizatorilor site-ului sau revocarea drepturilor unui utilizator. Dar pentru toate aceste acțiuni trebuie să-și dovedească identitatea pe server, și de aici își are partea de autentificare.

Fără o autentificare adecvată, ar fi foarte ușor pentru cineva cu ambiții răutăcioase să se împrăștie cu site-ul, astfel încât autentificarea oferă un nivel necesar de securitate pentru a restrânge drepturile unui utilizator și acțiunile care ar putea fi efectuate.

Autentificare Cu WP REST API

API-ul WP REST oferă trei opțiuni de autentificare, fiecare destinat unui anumit scop. Aceste opțiuni sunt:

  • autentificare de bază
  • Autentificare OAuth
  • autentificarea cookie-urilor

În acest moment, modul nativ de autentificare cu WordPress este autentificarea prin cookie-uri. Acesta este modul în care WordPress determină identitatea unui utilizator și ce acțiuni poate efectua. Pentru a utiliza celelalte două metode de autentificare enumerate mai sus cu WP REST API, trebuie să instalați pluginurile lor furnizate de echipa WP REST API disponibilă pe GitHub. Sperăm că aceste două metode vor fi de asemenea incluse în nucleul WordPress cu pluginul REST API în sine.

Autentificarea de bază este cel mai de bază tip de autentificare HTTP, în care sunt trimise acreditările de autentificare împreună cu anteturile cererii.

Cum funcționează autentificarea de bază

În autentificarea de bază, clientul solicită o adresă URL care necesită autentificare. Serverul solicită clientului (sau agentului utilizator) să se autentifice prin trimiterea unui mesaj 401 - Neautorizat cod. Clientul, în schimb, trimite aceeași solicitare, dar cu acreditările de conectare ca șir de coduri base64 în format nume utilizator, parola. Acest șir este trimis în Autorizare antet, după cum urmează:

Autorizație: bază base64_encode (nume de utilizator: parolă)

Deci, dacă este numele de utilizator tutsplus și parola este 123456, următorul câmp de antet va fi trimis împreună cu solicitarea:

Autorizație: Basic dHV0c3BsdXM6MTIzNDU2

Deoarece șirul codificat de bază64 poate fi ușor decodificat, această metodă este extrem de nesigură pentru a fi utilizată într-o rețea deschisă. Prin urmare, această metodă ar trebui utilizată numai pentru depanare și dezvoltare în cazul în care conexiunea dintre server și client este de încredere.

Instalarea pluginului

După cum sa menționat mai sus, pluginul este disponibil pe GitHub de la echipa WP REST API. Deci tot ce trebuie să facem este să-l clonăm în noi Plugin-uri director și să-l activați.

Mergeți la dvs. / Wp-content / plugins / director și clona pluginul de care aveți nevoie sudo drepturi de executare a comenzii. Pentru a face acest lucru, emiteți următoarele:

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

Terminalul vă va cere parola. Introduceți parola și lăsați depozitul să fie clonat într-un director.

După ce ați clonat pluginul, activați-l accesând Administratorul WP. Metoda de autentificare HTTP de bază poate fi acum utilizată cu pluginul REST API.

Trimiterea cererilor autentificate utilizând poștașul

Cei mai mulți clienți HTTP acceptă trimiterea unei cereri folosind metoda de autentificare de bază, la fel și Postman pentru Chrome. Pentru a trimite o cerere autentificată, mergeți la Autorizare sub bara de adrese:

Acum selectați De bază Auth din meniul drop-down. Vi se va cere să introduceți numele de utilizator și parola. După ce introduceți acreditările, faceți clic pe Actualizați solicitarea buton.

După actualizarea opțiunii de autentificare, veți vedea o modificare a opțiunii de autentificare Cap și include acum un câmp de antet care conține șirul de nume și parolă codificate:

Asta e totul despre modul în care am stabilit autentificarea de bază cu Postman. Acum puteți trimite o solicitare de testare, cum ar fi ștergerea unei postări care necesită autentificare:

Ștergeți adresa http: // dev-server / wp-json / wp / v2 / posts / 52

Unde dev-server este calea spre serverul de dezvoltare.

Dacă totul merge bine, serverul va returna a 200 OK codul de stare, care indică faptul că postul cu un id de 52 a fost sters:

Nu vă faceți griji cu privire la solicitarea pe care am făcut-o aici - vom trece prin ea mai detaliat în viitoarele părți ale seriei.

Trimiterea cererilor autentificate din linia de comandă

Putem folosi linia de comandă pentru a trimite cereri autentificate utilizând această metodă. Luați în considerare următoarele răsuci echivalentul cererii de mai sus:

curl - cerință DELETE -I - utilizator admin: parola http: // dev-server / wp-json / wp / v2 / posts / 52

Următorul răspuns va fi trimis de către server, indicând că totul este bine:

HTTP / 1.1 200 OK Data: Joi, 28 Aug 2015 20:02:43 GMT Server: Apache / 2.4.6 (CentOS) PHP / 5.6.12 Setare-cookie: PHPSESSID = k0rg6mcbsie7ufvoav219lqre0; calea = / Expiră: Joi, 19 Nov 1981 08:52:00 GMT Cache-control: no-store, no-cache, must-revalidate, post-check = 0, Content-Type-Opțiuni: nosniff Link: ; rel = "alternativă"; type = text / html Permiteți: GET, POST, PUT, PATCH, DELETE Transfer-codare: chunked Content-Type: application / json; charset = UTF-8

 --cerere opțiunea specifică metoda de solicitare care trebuie utilizată, ceea ce este cazul nostru ȘTERGE. Puteți utiliza, de asemenea -X ca alternativă la --cerere opțiune.

 -eu opțiunea doar preluă anteturile HTTP trimise de server. Alternatorul la -eu este --cap opțiune.

Trimiterea cererilor autentificate utilizând JavaScript

Dacă utilizați un cadru JavaScript de pe partea clientului, cum ar fi jQuery, pentru a interacționa de la distanță cu un site WordPress cu WP API activat, puteți trimite antetele de autorizare într-o solicitare AJAX. Luați în considerare următoarele ȘTERGE solicitarea trimisă prin jQuery.ajax () metodă:

$ .ajax (url: 'http: // dev-server / wp-json / wp / v2 / posts / 52', metoda: 'DELETE', crossDomain: true, beforeSend: function (xhr) xhr.setRequestHeader 'Autorizare', 'Basic' + Base64.encode ('nume de utilizator: parola');, succes: functie (date, txtStatus, xhr) console.log (data) );

Unde base64 este un obiect folosit pentru codarea și decodarea unui șir de bază64. Se definește după cum urmează, înainte de cele de mai sus jQuery.ajax () apel de metodă:

var Base64 = _ keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 + / =", codifica: funcția (e) var; var n, r, i, s, o, a; var; în timp ce (f> 2; o = (n & 3)<<4|r>> 4; u = (r & 15)<<2|i>> 6 a = i&63;dacă (isNaN (r)) u = a = 64 altceva dacă (isNaN (i)) a = 64 t = t + this._keyStr.charAt (s) + this._keyStr.charAt . Aceasta este o functie (var), var, var, a, var, o, u, a; var f = 0 ; e = e.replace (/ [^ A-Za-Z0-9 \ + \ / \ =] / g ""), în timp ce (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) retur t, _ utf8_decode: funcția (e) var; var n = 0; var r = c1 =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;

Am găsit-o pe StackOverflow și este un mod browser încrucișat de codificare și decodare a unui șir de bază în JavaScript.

În cererea de mai sus, am setat Autorizare antet folosind setRequestHeader () metodă a XHR obiect a trecut ca un argument pentru beforeSend () metodă.

În plus față de cererea de mai sus, Access-Control-Allow-Cap headers ar trebui să permită Autorizare câmpul de pe server. Acest lucru poate fi activat prin adăugarea următoarei linii de cod în fișierul dvs. WordPress .htaccess:

Antet setați întotdeauna setarea de autorizare pentru acces-control-permite-anteturi

Cererea de mai sus, după finalizare, va reda răspunsul din consola browserului dvs., după cum se arată în figura de mai jos:

200 codul răspunsului de stare returnat de server arată că postul cu un id de 52 a fost șters cu succes.

Trimiterea cererilor autentificate utilizând API-ul WP HTTP

Dacă interacționați de la distanță cu un alt site WordPress din instalarea WordPress, cel mai potrivit mod de a trimite cereri HTTP este WP HTTP API.

Luați în considerare următorul cod care trimite a ȘTERGE cereți unei alte instalări WordPress cu WP REST API și autentificarea de bază activată:

$ wp_request_headers = array ('Autorizare' => 'Basic'. base64_encode ('username: password')); $ wp_request_url = 'http: // localserver / wordpress-api / wp-json / wp / v2 / mesaje / 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);

Aici am folosit wp_remote_request () funcție care acceptă două argumente:

  • $ url: adresa URL a solicitării
  • $ args: o serie de argumente suplimentare care trebuie promovate

 metoda $ definită în $ args array este ȘTERGE, și ar trebui întotdeauna să fie scrise cu majuscule. $ antete array ia perechi de valori cheie din toate câmpurile antetului care urmează să fie transmise cu cererea. Am trecut Autorizare cheie cu un nume de utilizator și un șir de parolă codificat ca valoare.

Răspunsul va fi salvat în $ wp_delete_post_response variabilă, pe care o putem folosi cu wp_remote_retrieve_response_code () și wp_remote_retrieve_response_message () funcții. Aceste două funcții sunt funcții de ajutor în API-ul WP HTTP și extrag codul de stare și mesajul de stare respectiv din răspuns.

Dacă postul este șters cu succes de cererea de mai sus, se va relua următorul text:

200 OK

Asta e totul despre metoda de autentificare de bază susținută de WP REST API. Vom folosi aceeași metodă de autentificare în părțile viitoare pentru recuperarea, crearea sau modificarea datelor datorită simplității sale, cu excepția cazului în care se menționează altfel.

Concluzie

În partea curentă a seriei, am analizat cu atenție metoda de autentificare HTTP de bază, susținută de WP REST API. Cu toate acestea, nu ar trebui să fie utilizat în medii de producție vii datorită faptului că șirul codificat de bază64 ar putea fi ușor decodat și acreditările dvs. ar putea cădea în mâinile greșite.

După ce am instalat și testat metoda de autentificare de bază HTTP, suntem gata să facem un pas mai departe și să instituim o metodă de autentificare mai sofisticată - metoda OAuth 1.0a. Vom face acest lucru în următoarea parte a seriei, deci stați liniștiți!

Cod