Come impostare e utilizzare l'autenticazione OAuth utilizzando l'API REST di WP

Pubblicato: 2016-11-30
imposta wordpress rest API
Segui @Cloudways

Quando si tratta di API REST di WordPress, OAuth è il provider di gestione dell'autenticazione più comune.

Quando è attiva l'autenticazione OAuth, gli utenti accedono prima tramite il modulo di accesso di WordPress in uso sul sito web. tuttavia, questo accesso autorizza anche i client a gestire le richieste per loro conto e tutte le richieste successive vengono convalidate tramite token OAuth. Questi token vengono utilizzati anche per gestire tutte le richieste di accesso API. Questo accesso potrebbe essere revocato in qualsiasi momento.

Forse, l'uso più importante del processo di autenticazione OAuth è il processo sicuro di gestione delle richieste API REST senza esporre le credenziali degli utenti. Ciò è particolarmente importante nel caso di server di produzione in cui le credenziali vengono spesso scambiate. In tali scenari, l'autenticazione OAuth viene utilizzata per fornire una procedura sicura per la gestione delle frequenti richieste di credenziali di accesso.

  • Autenticazione tradizionale rispetto a OAuth
  • Flusso di lavoro di autenticazione OAuth
  • Installazione dell'autenticazione OAuth
  • Valutazione della disponibilità dell'API OAuth
  • Creazione e gestione di applicazioni
  • CLI client per generare credenziali OAuth
  • Client HTTP per generare credenziali OAuth
  • Acquisizione di credenziali temporanee
  • Autorizzazione dell'utente
  • Scambio di gettoni
  • Invio di una richiesta di prova autenticata

Autenticazione tradizionale rispetto a OAuth

Per comprendere il significato dell'autenticazione OAuth, è importante comprendere il modello di autenticazione tradizionale e OAuth.

Nel modello di autenticazione tradizionale, ci sono due entità chiave; Cliente e fornitore di risorse/servizi. Il client potrebbe essere un'app Web, un servizio o un utente, mentre il provider di risorse/servizi dispone delle risorse o dei servizi desiderati in un ambiente con accesso limitato.

Quando il Cliente richiede una particolare risorsa, si autentica con il Resource Provider fornendo le credenziali appropriate. Sebbene si tratti di un processo semplice, esiste anche un enorme rischio di violazione della sicurezza.

Al contrario, il modello di autenticazione OAuth è leggermente più complesso con tre entità; Client che agisce per conto dell'utente, Utente che richiede l'accesso a una risorsa e Server che mantiene la risorsa.

Poiché ci sono tre entità, il processo è noto come autenticazione a tre gambe. Tuttavia, nei casi in cui il Cliente e l'Utente siano le stesse entità, il processo di autenticazione diventa un'autenticazione a due gambe.

Flusso di lavoro di autenticazione OAuth

Flusso di lavoro

  • Il Cliente richiede all'Utente l' autorizzazione ad accedere al Server .
  • Se l' Utente acconsente alla richiesta, il Cliente riceve il diritto di procedere ulteriormente.
  • Il Cliente presenta la propria identità e il mandato dal Cliente all'Authorization Server (API) e richiede un token.
  • In caso di validazione dell'identità e del mandato, l' Authorization Server (API) rilascia un token di accesso al Cliente . A questo punto l'autenticazione è completa.
  • Successivamente, il Cliente si avvicina al Server per richiedere una particolare risorsa. A questo punto il Cliente invia il token di accesso anche al
  • Se il token di accesso è convalidato, il Server concede l'accesso alla risorsa richiesta.

Il Cliente origina la richiesta firmata per un token di richiesta. Questa richiesta è anche nota come credenziali temporanee. La richiesta viene inviata all'URI dell'endpoint pertinente. Questa richiesta comprende diversi parametri importanti:

  • oauth_consumer_key : questa chiave identifica l'applicazione che ha originato la richiesta.
  • oauth_timestamp : i server utilizzano questo timestamp per l'ottimizzazione dell'archiviazione nonces.
  • oauth_nonce : questo è il token univoco generato dall'applicazione per ogni singola richiesta.
  • oauth_signature : questa parte importante della richiesta API è l'hash di tutti i componenti della richiesta e alcuni valori OAuth.
  • oauth_signature_method : il plugin OAuth offre un metodo di firma singola: HMAC-SHA1.
  • oath_callback : l'URL a cui l'utente viene reindirizzato dopo l'autorizzazione. La richiesta viene verificata e viene emesso un token di richiesta con i seguenti parametri.
  • oauth_token : questo è il token dell'applicazione che viene rimosso dalla risposta del server di autorizzazione. Questo token viene quindi inviato al server API.
  • oauth_token_secret : è simile alla password dell'utente. La richiesta viene quindi autorizzata dal Cliente. Per questo, viene creato un URI di richiesta e oauth_token viene aggiunto all'URI dell'endpoint di autorizzazione del server. L'Utente autorizza l'invio di tale richiesta fornendo adeguate credenziali.

Nel caso in cui l' URI oauth_callback sia disponibile nel primo passaggio, il server reindirizza all'URI con i seguenti parametri aggiunti alla stringa di query:

  • oauth_token : possiedi già il token.
  • oauth_verifier : verifica l'identità del proprietario della risorsa sul client.

Se l'URI oauth_callback non è stato fornito nel primo passaggio, il server invia il valore di oauth_verifier in modo che il proprietario della risorsa possa informare il client manualmente.

Dopo aver ricevuto oauth_verfier , il client richiede al server le credenziali del token. Questo assume la forma di una richiesta all'URI dell'endpoint della richiesta token. Questa richiesta contiene i seguenti parametri:

  • oauth_token
  • oauth_verfier
  • oauth_consumer_key
  • oauth_signature
  • oauth_signature_method
  • oauth_nonce
  • oauth_version

Installazione dell'autenticazione OAuth

Nel contesto di WordPress, l'autenticazione OAuth viene implementata installando l'API di autenticazione OAuth per WordPress. Questo si basa sulle specifiche OAuth 1.0a ed estende effettivamente queste specifiche con un parametro aggiuntivo wp_scope. Questo parametro viene inviato all'endpoint della richiesta di credenziali temporanee .

Il plugin è disponibile su Github dal team dell'API REST di WP. Al momento sono supportate la versione 4.4 e successive.

Inizierò il processo di clonazione del plugin spostandomi nella directory /wp-content/plugins/ :

 git clone https://github.com/WP-API/OAuth1.git 

Installazione Git

Al termine del download, attiva il plugin tramite la CLI di WordPress:

 wp plugin attiva OAuth1

Se non desideri utilizzare la CLI di WordPress, puoi andare su WordPress Admin >> Plugin e attivare il plug-in dal menu. In alternativa, puoi anche attivarlo navigando nel tuo browser nella sezione dei plugin di amministrazione di WordPress se non desideri utilizzare WP CLI.

Valutazione della disponibilità dell'API OAuth

Prima di avviare l'handshake OAuth, controllerò innanzitutto se l'API è abilitata sul server. Questo viene fatto inviando una semplice richiesta GET al /wp-json/ endpoint e quindi analizzando la risposta inviata dal server.

 OTTIENI http://Server-Dev/wp-json/

Ciò restituirà una risposta JSON come segue:

con autenticazione

Il mio obiettivo qui è il valore oauth1 nel valore della proprietà di autenticazione . Questo oggetto ha le seguenti proprietà definite:

  • richiesta : l'endpoint della richiesta di credenziali temporanee
  • autorizzare : l'endpoint di autorizzazione del proprietario della risorsa
  • access : l'endpoint della richiesta di token
  • version : la versione di OAuth in uso

Se l'API OAuth non è abilitata per un sito, la risposta del server conterrà un valore della proprietà di autorizzazione vuoto.

senza autenticazione

Creazione e gestione di applicazioni

Il primo passaggio consiste nell'assicurarsi che il plug-in OAuth1.0 sia installato e attivato correttamente.

Successivamente, posso creare e gestire applicazioni andando su WordPress Admin >> Utenti >> Applicazioni.

utilizzare il modulo di domanda

In questa pagina Applicazioni registrate , registrerò una nuova applicazione facendo clic sul pulsante Aggiungi nuovo e quindi compilando i tre campi seguenti:

  1. Nome cliente: il nome del cliente che appare nella sezione Applicazioni autorizzate e durante il processo di autorizzazione.
  2. Descrizione : La descrizione facoltativa del Cliente.
  3. URL di richiamata : l'URL di richiamata viene utilizzato durante la generazione di credenziali temporanee.

Una volta creati facendo clic sul pulsante Salva cliente , i parametri Chiave cliente e Segreto cliente appariranno nella parte inferiore della pagina per questo particolare cliente.

credenziale di giuramento

Ora clonerò il repository sul client eseguendo il seguente comando:

 git clone https://github.com/WP-API/client-cli 

CLI cliente

Ora vai nella directory clonata e installa le dipendenze del pacchetto usando Composer:

 cd client-cli
installazione del compositore

Se tutto va bene, la riga di comando dovrebbe mostrare qualcosa di simile a quanto segue:

installazione del compositore

CLI client per generare credenziali OAuth

Per avviare il processo di autorizzazione OAuth, otterrò prima i seguenti parametri dal server:

  • oauth_consumer_key
  • oauth_consumer_secret

Questo verrà generato tramite il terminale ed eseguendo il seguente comando CLI di WordPress:

 wp oauth1 add

La chiave e il segreto sono oauth_consumer_key e oauth_consumer_secret rispettivamente.

Ora devo collegare il client al sito WordPress. Sul client, vai alla directory client-cli (clonata in precedenza) ed esegui il seguente comando:

 wp --require=client.php api oauth1 connect http://Server-Dev/ --key=<la tua chiave qui> --secret=<il tuo segreto qui>

Sostituisci l'URL, la chiave e il segreto nel comando precedente. L'output dovrebbe essere simile al seguente:

 wp --require=client.php api oauth1 connect http://your-server/wordpress-api/ --key=<tua chiave> --secret=<tuo codice segreto>
Apri nel tuo browser: http://your-server/wordpress-api/oauth1/authorize?oauth_token=<your-token>
Inserisci il codice di verifica:

Passare all'URL fornito dal server e autenticarsi facendo clic sul pulsante Autorizza :

connetti l'API REST di WP

Ti verrà presentato il token di verifica (o oauth_verifier) ​​nella schermata successiva:

Token di autorizzazione

Copia il verificatore e incollalo nel terminale. Ti verrà data una chiave e un segreto , che sono fondamentalmente oauth_token e oauth_token_secret rispettivamente:

Client HTTP per generare credenziali OAuth

Poiché il plug-in del server OAuth 1.0a segue il flusso standard a tre vie, la generazione di credenziali OAuth prevede i seguenti passaggi:

  • Acquisizione di credenziali temporanee
  • Autorizzazioni utente
  • Scambio di token

Acquisizione di credenziali temporanee

Invierò una richiesta POST a /oauth1/request endpoint per ottenere le credenziali temporanee. Tieni presente che questo endpoint dovrebbe essere rilevabile automaticamente poiché un server potrebbe sostituire il percorso da solo.

La richiesta POST deve includere i parametri e oauth_consumer_secret acquisiti durante la registrazione di un consumatore per l'applicazione. La richiesta potrebbe includere anche il parametro oauth_callback e questo URL di callback deve corrispondere allo schema, host, porta e percorso dell'URL di callback fornito durante la registrazione dell'applicazione.

Oltre ai parametri oauth_consumer_key e oauth_consumer_secret , la richiesta deve includere anche i parametri oauth_signature e oauth_signature_method .

Quando si utilizza Postman, la oauth_signature viene generata automaticamente. Ho solo bisogno di menzionare il parametro oauth_signature_method . Al momento, solo il metodo di firma HMAC-SHA1 è supportato dal plug-in del server OAuth.

Ora configurerò Postman per inviare una richiesta POST all'endpoint delle credenziali del token temporaneo. Successivamente, nella scheda Autorizzazione , seleziona l'opzione OAuth 1.0 dal menu a discesa. Compila i campi Chiave consumatore e Segreto consumatore con i valori forniti dal consumatore. Infine, controlla che l'opzione Metodo di firma sia impostata su HMAC-SHA1 .

Autorizzazione dell'utente

Per la fase di autorizzazione dell'utente, aprirò l'endpoint di autorizzazione del proprietario della risorsa nel browser e passerò oauth_token e oauth_token_secret come ottenuto nel passaggio precedente come parametri di query:

 http://server-dev/oauth1/authorize?oauth_token=<token_qui>&oauth_token_secret=<segreto_qui> 

Autorizza la connessione

Autorizzare l'applicazione facendo clic sul pulsante Autorizza . La schermata successiva presenterà un token di verifica. Questo token ora fungerà da token oauth_verifier nel passaggio successivo.

Una volta che l'utente ha autorizzato il client, l'applicazione verrà visualizzata nella sezione Applicazioni autorizzate nella pagina Utenti > Il tuo profilo .

Scambio di gettoni

Utilizzando nuovamente l'opzione OAuth 1.0 nella scheda Autorizzazione , compilare i campi per Chiave consumatore e Segreto consumatore con i valori forniti dal consumatore. Nei campi per Token e Token Secret, inserire il valore parametri oauth_token e oauth_token_secret (credenziali temporanee).

Poiché posso anche passare parametri nell'URL come parametri di query, aggiungi il parametro oauth_verifier all'URL come segue:

 http://server-dev/oauth1/access?oauth_verifier=<oauth_verifier_value>

Con tutti i parametri in atto, invia la richiesta facendo clic sul pulsante Invia . Se tutto va bene, il server restituirà un codice di stato 200 – OK insieme al corpo della risposta contenente i parametri oauth_token e o auth_token_secret .

 oauth_token=<oauth_token_value>&oauth_token_secret=<oauth_secret_value>

A questo punto i token temporanei acquisiti in precedenza vengono scartati e non possono più essere utilizzati.

I nuovi parametri oauth_token e oauth_token_secret sono le credenziali OAuth che puoi utilizzare nel client per generare richieste autenticate.

Invio di una richiesta autenticata di prova

Ora che ho le credenziali del token, invierò una richiesta di prova al server utilizzando il postino. La richiesta richiederà i seguenti parametri:

Dovrai disporre di quanto segue prima di iniziare:

  • oauth_consumer_key
  • oauth_consumer_secret
  • oauth_token
  • oauth_token_secret

Seleziona OAuth 1.0 dal menu a discesa nella scheda Autorizzazione in Postino.

Autorizzazione

Una volta compilati tutti i campi, fare clic sul pulsante Aggiorna richiesta . Selezionare l'opzione Aggiungi parametri all'intestazione per inviare i parametri nell'intestazione della richiesta invece di aggiungerli alla stringa di query.

Se la richiesta ha esito positivo, il server invierà un codice di stato 200 – OK .

Avvolgendo!

In questo tutorial, ho discusso su come configurare l'API di autenticazione OAuth per WordPress su un server e come utilizzare il client HTTP per ottenere le credenziali del token. Se scopri un problema nel codice o desideri aggiungerlo alla discussione, lascia un commento qui sotto.