Estende l’API REST WP utilizzando l’autenticazione dei token Web JSON come metodo di autenticazione.
I token Web JSON sono un metodo RFC 7519 aperto e standard del settore per rappresentare in modo sicuro le rivendicazioni tra due parti.
Supporto e richieste per favore in Github: https://github.com/Tmeister/wp-api-jwt-auth
REQUISITI
API REST WP V2
Questo plugin è stato concepito per estendere le funzionalità del plugin WP REST API V2 e, ovviamente, è stato costruito sopra di esso.
Quindi, per utilizzare wp-api-jwt-auth è necessario installare e attivare l’API REST WP.
PHP
Versione PHP minima: 7.4.0
Abilitazione intestazione autorizzazione HTTP PHP
La maggior parte degli hosting condivisi ha disabilitato l’intestazione di autorizzazione HTTP per impostazione predefinita.
Per abilitare questa opzione dovrai modificare il tuo file .htaccess aggiungendo il seguente
RewriteEngine on RewriteCond %{HTTP:Authorization} ^(.*) RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
WPENGINE
Per abilitare questa opzione dovrai modificare il tuo file .htaccess aggiungendo il seguente Vedi https://github.com/Tmeister/wp-api-jwt-auth/issues/1
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
CONFIGURAZIONE
Configura la chiave segreta
Il JWT necessita di una chiave segreta per firmare il token, questa chiave segreta deve essere univoca e mai rivelata.
Per aggiungere la chiave segreta modifica il tuo file wp-config.php e aggiungi una nuova costante chiamata JWT_AUTH_SECRET_KEY
define('JWT_AUTH_SECRET_KEY', 'la tua chiave-top-secret');
Puoi usare una stringa da qui https://api.wordpress.org/secret-key/1.1/salt/ Configurare il supporto COR
Il plugin wp-api-jwt-auth ha la possibilità di attivare il supporto COR.
Per abilitare il supporto CORs modifica il tuo file wp-config.php e aggiungi una nuova costante chiamata JWT_AUTH_CORS_ENABLE
define('JWT_AUTH_CORS_ENABLE', true);
Infine attiva il plugin all’interno del tuo wp-admin.
Spazio dei nomi ed endpoint
Quando il plugin viene attivato, viene aggiunto un nuovo spazio dei nomi
/jwt-auth/v1
Inoltre, vengono aggiunti due nuovi endpoint a questo spazio dei nomi
Punto finale | Verbo HTTP
/wp-json/jwt-auth/v1/token | INVIARE
/wp-json/jwt-auth/v1/token/validate | INVIARE
UTILIZZO
/wp-json/jwt-auth/v1/token
Questo è il punto di ingresso per l’autenticazione JWT.
Convalida le credenziali dell’utente, nome utente e password e restituisce un token da utilizzare in una richiesta futura all’API se l’autenticazione è corretta o restituisce un errore se l’autenticazione non riesce.
Richiesta di esempio utilizzando AngularJS
define('JWT_AUTH_SECRET_KEY', 'your-top-secret-key');
Risposta di successo dal server
{ "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9qd3QuZGV2IiwiaWF0IjoxNDM4NTcxMDUwLCJuYmYiOjE0Mzg1NzEwNTAsImV4cCI6MTQzOTE3NTg1MCwiZGF0YSI6eyJ1c2VyIjp7ImlkIjoiMSJ9fX0.YNe6AyWW4B7ZwfFE5wJ0O6qQ8QFcYizimDmBy6hCH_8", "user_display_name": "admin", "user_email": "admin@localhost.dev", "user_nicename": "admin" }
Risposta di errore dal server
{ "code": "jwt_auth_failed", "data": { "status": 403 }, "message": "Invalid Credentials." }
Una volta ottenuto il token, devi memorizzarlo da qualche parte nella tua applicazione, ad es. in un cookie o utilizzando localstorage.
Da questo punto, dovresti passare questo token a ogni chiamata API
Chiamata di esempio utilizzando l’intestazione Authorization utilizzando AngularJS
app.config( function( $httpProvider ) { $httpProvider.interceptors.push( [ '$q', '$location', '$cookies', function( $q, $location, $cookies ) { return { 'request': function( config ) { config.headers = config.headers || {}; //Assume that you store the token in a cookie. var globals = $cookies.getObject( 'globals' ) || {}; //If the cookie has the CurrentUser and the token //add the Authorization header in each request if ( globals.currentUser && globals.currentUser.token ) { config.headers.Authorization = 'Bearer ' + globals.currentUser.token; } return config; } }; } ] ); } );
Il wp-api-jwt-auth intercetterà ogni chiamata al server e cercherà l’intestazione di autorizzazione, se l’intestazione di autorizzazione è presente proverà a decodificare il token e imposterà l’utente in base ai dati memorizzati in esso.
Se il token è valido, il flusso delle chiamate API continuerà come sempre.
Intestazioni di esempio
POST /resource HTTP/1.1 Host: server.example.com Authorization: Bearer mF_s9.B5f-4.1JqM
ERRORI
Se il token non è valido verrà restituito un errore, ecco alcuni esempi di errori.
Credenziali non valide
[ { "code": "jwt_auth_failed", "message": "Invalid Credentials.", "data": { "status": 403 } } ]
Firma non valida
[ { "code": "jwt_auth_invalid_token", "message": "Signature verification failed", "data": { "status": 403 } } ]
Gettone scaduto
[ { "code": "jwt_auth_invalid_token", "message": "Expired token", "data": { "status": 403 } } ]
/wp-json/jwt-auth/v1/token/validate
Questo è un semplice endpoint di supporto per convalidare un token; dovrai solo effettuare una richiesta POST inviando l’intestazione dell’autorizzazione.
Risposta token valida
{ "code": "jwt_auth_valid_token", "data": { "status": 200 } }
GANCI DISPONIBILI
wp-api-jwt-auth è intuitivo per gli sviluppatori e dispone di cinque filtri per sovrascrivere le impostazioni predefinite.
jwt_auth_cors_allow_headers
jwt_auth_cors_allow_headers consente di modificare le intestazioni disponibili quando il supporto CORs è abilitato.
Valore di default:
'Access-Control-Allow-Headers, Content-Type, Authorization'
jwt_auth_not_before
jwt_auth_not_before ti consente di modificare il valore nbf prima che il token venga creato.
Valore di default:
Tempo di creazione – tempo()
jwt_auth_expire
jwt_auth_expire ti consente di modificare il valore exp prima che il token venga creato.
Valore di default:
tempo() + (GIORNO_IN_SECONDI * 7)
jwt_auth_token_before_sign
Il jwt_auth_token_before_sign consente di modificare tutti i dati del token prima di essere codificati e firmati.
Valore predefinito
<?php $token = array( 'iss' => get_bloginfo('url'), 'iat' => $issuedAt, 'nbf' => $notBefore, 'exp' => $expire, 'data' => array( 'user' => array( 'id' => $user->data->ID, ) ) );
jwt_auth_token_before_dispatch
Il jwt_auth_token_before_dispatch consente di modificare tutto l’array di risposta prima di inviarlo al client.
Valore di default:
<?php $data = array( 'token' => $token, 'user_email' => $user->data->user_email, 'user_nicename' => $user->data->user_nicename, 'user_display_name' => $user->data->display_name, );
jwt_auth_algoritmo
Il jwt_auth_algorithm consente di modificare l’algoritmo di firma.
Valore di default:
<?php $token = JWT::encode( apply_filters('jwt_auth_token_before_sign', $token, $user), $secret_key, apply_filters('jwt_auth_algorithm', 'HS256') ); // ... $token = JWT::decode( $token, new Key($secret_key, apply_filters('jwt_auth_algorithm', 'HS256')) );