Home jwt authentication jwt authentication wordpress

jwt authentication wordpress

108
0

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'))
);
Previous articleDisabilita il plugin e l’editor dei file dei temi
Next articleDisattiva la variabile di sessione

LEAVE A REPLY

Please enter your comment!
Please enter your name here