Configurarea autentificării WordPress cu un API extern

31 mai 2017, 12:39:54
Vizualizări: 20.9K
Voturi: 9

Există un site non-WordPress existent și am nevoie ca utilizatorii lor să se poată autentifica pe noul meu site WordPress folosind aceleași credențiale pe care le au deja.

Mi s-a furnizat un endpoint (www.example-api.com/token) și date de autentificare (email și parolă) care returnează un token (și alte detalii) ca răspuns.

Am citit despre OAuth și majoritatea resurselor pe care le găsesc sunt pentru probleme în sens invers (cum ar fi autentificarea pe un site non-WordPress folosind credențialele de pe site-ul WordPress). Nu am acces la celălalt site și văd că necesită configurare acolo, așa că ar trebui să exclud această opțiune?

M-am lovit de suprascrierea funcției wp_authenticate prin intermediul unui plugin personalizat, pe care l-am configurat deja, dar sunt blocat în ceea ce privește CE și CUM să fac acest lucru.

Aveți vreun ghid sau sfat pentru această situație?

2
Comentarii

În prezent, nu văd nicio modalitate fezabilă de a realiza acest lucru fără o legătură de la site-ul non-WP către acesta. Altfel: unde ar trebui să confirmi că credentialele trimise de utilizatori de pe site-ul non-WP pe site-ul tău sunt cu adevărat corecte și corespund unui anumit utilizator? Sper că înțelegi!

nyedidikeke nyedidikeke
31 mai 2017 14:17:35

Cred că nu m-am exprimat suficient de clar – aveam acces la un endpoint și, de asemenea, la niște date de test pentru adresa de email și parola conturilor de care aveam nevoie. Am reușit totuși, o să postez soluția. Mulțumesc pentru ajutor! :)

Suika Suika
5 iun. 2017 12:58:54
Toate răspunsurile la întrebare 1
9
12

Actualizare: Am creat un articol pe blog pentru a explica acest lucru mai bine :)


Am reușit să fac asta folosind filtrul authenticate din WordPress într-un nou plugin; majoritatea fiind ghidate de acest tutorial scris de Ben Lobaugh. Punctele principale ale pluginului:

  • Crează o funcție pentru apelul API folosind cURL (poți obține coduri ghid de la Postman în timpul testării dacă nu știi deja).
  • Adaugă un filtru care verifică dacă răspunsul de la apel indică faptul că utilizatorul există și are acces (în cazul meu, bazat pe rolul utilizatorului).
  • Tot folosind filtrul, verifică dacă utilizatorul are deja un cont pe site-ul WordPress – dacă nu, creează-i unul folosind wp_insert_user. Pentru clarificare, am folosit email-ul și parola verificate de API deoarece WordPress necesită un utilizator înregistrat în baza sa de date.
  • Dacă utilizatorul există deja în baza de date WordPress, asigură-te că credentialele sunt aceleași folosind wp_update_user. Acestea sunt pentru cazuri precum când și-au schimbat detaliile pe site-ul principal non-WordPress.
  • Opțional, adaugă o pagină de setări pentru plugin. În cazul meu, am creat un câmp pentru URL-ul de cerere urmând acest tutorial scris de Bharat Pareek.
6 iun. 2017 05:32:41
Comentarii

deci ai implementat un fel de SSO, care este într-adevăr singura modalitate de a aborda această situație. Dar partea cu "dacă utilizatorul nu există, creează un cont" sună foarte greșit. Orice atac brute force la o scară mai mare ar putea să-ți distrugă WordPress-ul

Mark Kaplun Mark Kaplun
6 iun. 2017 05:49:52

Poți să explici mai detaliat? Am avut impresia că trebuie să le creez un utilizator local WordPress, deoarece ghidul pe care l-am urmat (primul link) specifica clar: "WordPress necesită ca un utilizator real (utilizator WordPress) să fie prezent în baza de date WordPress pentru a putea efectua operațiuni pe acel utilizator."

Eu creez un nou utilizator doar dacă răspunsul indică acest lucru, iar înregistrarea se face folosind email-ul și parola lor din API.

Suika Suika
6 iun. 2017 06:00:32

poate este doar ceva în descrierea ta, sau o neînțelegere din partea mea, dar sună de parcă creezi un utilizator pentru fiecare cerere de "verificare".

Mark Kaplun Mark Kaplun
6 iun. 2017 07:43:09

Ah, cred că am înțeles... autentifici utilizatorii WordPress pe celălalt site. În acest caz, da, logica ta este corectă.

Mark Kaplun Mark Kaplun
6 iun. 2017 07:46:24

Înțeleg. Da, probabil este vorba de formulare. O să o editez pentru a o face mai clară. Mulțumesc!

Suika Suika
6 iun. 2017 09:06:50

Linkul către blog returnează eroarea 404

M.Babcock M.Babcock
25 ian. 2019 00:59:11

Am reparat link-ul blogului! :)

Suika Suika
14 mar. 2019 09:08:59

Mulțumesc! Mă gândesc să folosesc această abordare. Cum te descurci când un utilizator își schimbă parola în aplicația non-WP? Pur și simplu folosești API-ul REST WP pentru a actualiza?

Kevin Amorim Kevin Amorim
9 dec. 2020 11:53:00

Da, așa am procedat, deoarece autentificarea pe site-ul non-WP este singurul loc unde pot actualiza parola oricum. Mult succes! :)

Suika Suika
10 dec. 2020 16:08:25
Arată celelalte 4 comentarii