autenticazione rest api
Sto cercando di imparare l'API REST di WordPress.
Voglio creare un post.
Sto usando l'applicazione Postman.
Ricevo l'errore 401 quando provo a fare una richiesta POST (mentre GET funziona bene)
Pensavo che essere loggato nel mio sito WordPress fosse sufficiente per l'autenticazione tramite cookie.

Il core di WordPress ora supporta una nuova API REST a partire dalla versione 4.8.x. Tra un mare di nuove possibilità, ora è possibile costruire un front-end per un sito web o un'app con un framework come React o Angular e utilizzare WordPress e la sua familiare dashboard di amministrazione per gestire il back-end. Quindi recuperando tutti i contenuti nel front-end effettuando richieste all'API di WordPress. Alcune richieste (principalmente, le richieste POST) devono essere autenticate.
Quindi utilizzando JWT puoi estendere l'API REST di WP utilizzando l'autenticazione con JSON Web Tokens come metodo di autenticazione.
Autenticazione dell'API REST di WordPress:
Autenticazione predefinita con cookie: l'autenticazione con cookie è l'unico meccanismo di autenticazione disponibile nativamente in WordPress.
Applicazioni remote:
Per supportare le applicazioni remote, dobbiamo aggiungere un nuovo metodo di autenticazione per l'API REST utilizzando un plugin.
Le opzioni attualmente supportate sono Basic Auth, OAuth e JWT:
Basic Auth con nome utente e password è considerato insicuro e dovrebbe essere utilizzato solo in scenari di sviluppo
OAuth è ottimo ma può essere complicato da autenticare
JWT è fantastico e funziona benissimo con i framework front-end
Cos'è un JSON Web Token?
JSON Web Token (JWT) è uno standard aperto (RFC 7519) che definisce un modo compatto e autonomo per trasmettere in modo sicuro informazioni tra parti come oggetto JSON. Queste informazioni possono essere verificate e considerate attendibili perché sono firmate digitalmente. I JWT possono essere firmati utilizzando un segreto (con l'algoritmo HMAC) o una coppia di chiavi pubblica/privata utilizzando RSA o ECDSA.
Sebbene i JWT possano essere crittografati per fornire anche segretezza tra le parti, ci concentreremo sui token firmati. I token firmati possono verificare l'integrità delle affermazioni contenute al loro interno, mentre i token crittografati nascondono tali affermazioni alle altre parti. Quando i token sono firmati utilizzando coppie di chiavi pubbliche/private, la firma certifica anche che solo la parte che detiene la chiave privata è quella che l'ha firmata.
Utilizzi dei JSON Web Tokens:
Autorizzazione – Una volta che l'utente è loggato, ogni richiesta successiva includerà il JWT, consentendo all'utente di accedere a route, servizi e risorse consentiti con quel token.
Scambio di informazioni – I JSON Web Tokens sono un buon modo per trasmettere in modo sicuro informazioni tra parti. Poiché i JWT possono essere firmati – ad esempio, utilizzando coppie di chiavi pubbliche/private
Perché dovremmo usare JSON Web Tokens?
Sicurezza – trasmissione sicura di informazioni tra parti utilizzando coppie di chiavi pubbliche/private
I parser JSON sono comuni nella maggior parte dei linguaggi di programmazione perché si mappano direttamente agli oggetti
Facilità di elaborazione lato client del JSON Web token su più piattaforme, soprattutto mobile.
Compatto: A causa delle sue dimensioni, può essere inviato tramite un URL, un parametro POST o all'interno di un header HTTP. Inoltre, grazie alle sue dimensioni, la trasmissione è veloce.
Autonomo: Il payload contiene tutte le informazioni necessarie sull'utente, per evitare di interrogare il database più di una volta.
Come funzionano i JSON Web Tokens?
Accesso utente ([nomeutente/password]) => Server di autenticazione => Utente autenticato, JWT creato e restituito all'UTENTE
UTENTE (Utente passa [JWT] quando effettua chiamate API) => Server applicazione => Applicazione verifica ed elabora la chiamata API => invia dati / messaggio all'UTENTE
l'utente prima accede al server di autenticazione utilizzando il sistema di login del server di autenticazione (ad esempio nome utente e password, login Facebook, login Google, Twitter ecc.). Il server di autenticazione crea quindi il JWT e lo invia all'utente. Quando l'utente effettua chiamate API all'applicazione, l'utente passa il JWT insieme alla chiamata API. In questa configurazione, il server dell'applicazione sarebbe configurato per verificare che i JWT in arrivo siano creati dal server di autenticazione
quando l'utente effettua chiamate API con il JWT allegato, l'applicazione può utilizzare il JWT per verificare che la chiamata API provenga da un utente autenticato.
JWT è solo una stringa con il seguente formato:
header.payload.firma
Header– consiste in due parti: il tipo di token, che è JWT, e l'algoritmo di firma utilizzato, come HMAC SHA256 o RSA.
Per esempio:
{
“alg”: “HS256”,
“typ”: “JWT”
}
Payload – contiene le affermazioni. Le affermazioni sono dichiarazioni su un'entità (tipicamente l'utente) e dati aggiuntivi. Ci sono tre tipi di affermazioni: registrate, pubbliche e private.
Affermazioni registrate: sono un insieme di affermazioni predefinite che non sono obbligatorie ma raccomandate, per fornire un insieme utile di affermazioni interoperabili. Alcune di esse sono: iss (emittente), exp (tempo di scadenza), sub (soggetto), aud (pubblico), e altre.
Affermazioni pubbliche: possono essere definite a piacere da chi utilizza i JWT. Ma per evitare collisioni dovrebbero essere definite nel registro IANA JSON Web Token.
Affermazioni private: sono le affermazioni personalizzate create per condividere informazioni tra parti che concordano sul loro utilizzo e non sono né registrate né pubbliche.
Un esempio di payload potrebbe essere:
{
“user_id”: “4”
}
Firma – Per creare la parte della firma devi prendere l'header codificato, il payload codificato, un segreto, l'algoritmo specificato nell'header e firmare.
Ad esempio, se vuoi usare l'algoritmo HMAC SHA256, la firma verrà creata nel seguente modo:
HMACSHA256(
base64UrlEncode(header) + “.” +
base64UrlEncode(payload),
secret)
La firma viene utilizzata per verificare che il messaggio non sia stato modificato lungo il percorso e, nel caso di token firmati con una chiave privata, può anche verificare che il mittente del JWT sia chi dice di essere.
Plugin di Autenticazione:
Autenticazione che funzionerà da applicazioni remote.
Alcuni plugin per l'Autenticazione:
OAuth 1.0a Server : Connetti applicazioni al tuo sito WordPress senza mai rivelare la tua password.
Questo plugin supporta solo WordPress >= 4.4.
Application Passwords : – autentica un utente senza fornire direttamente la password di quell'utente, invece utilizzerai una stringa codificata in base64 del suo nome utente e una nuova password dell'applicazione.
JSON Web Tokens – Estende l'API REST di WP utilizzando l'autenticazione con JSON Web Tokens come metodo di autenticazione.
WP User : Estende l'API REST di WP utilizzando l'autenticazione con JSON Web Tokens (JWT) come metodo di autenticazione.
Il plugin WP User ti aiuta a creare un modulo di login e registrazione front end sul sito web oltre a creare un token JWT per l'API REST di WP con ulteriori funzionalità di sicurezza come Tentativi di Login Limitati, Espressione Regolare per la Password, Blacklisting / Whitelisting di indirizzi IP ecc.
Se gli utenti effettuano login o registrazioni e desiderano evitare le normali pagine di login di WordPress, questo plugin aggiunge la possibilità di inserire un login, registrazione, recupero password con effetti fluidi in AJAX oltre al supporto per l'API REST.
https://wordpress.org/plugins/wp-user/
Conclusione
L'API RESTful di WP è il futuro per il CMS WordPress e avere un modo affidabile per autenticare gli utenti è sicuramente la prima cosa nella lista. JWT è la soluzione migliore per l'autenticazione con l'aiuto di WP User o JSON Web Tokens

No, il fatto che tu sia autenticato nel tuo sito Wordpress non significa che tu sia autenticato nell'API Wordpress. Hai bisogno di un token JWT.
