Le guide complet pour implémenter l'authentification JWT dans WordPress en profondeur

Image [1] - Analyse approfondie du guide complet pour la mise en œuvre de l'authentification JWT dans WordPress - Photon Volatility Network | Service professionnel de réparation de WordPress, portée mondiale, réponse rapide

JWT (JSON Web Token) est un jeton léger et autonome pour l'authentification et l'autorisation qui encode les informations de l'utilisateur (telles que l'ID de l'utilisateur, les rôles et les permissions, etc.) dans un objet JSON et le signe numériquement pour générer un jeton signé. Dans cet article, nous allons présenter le concept et la structure du JWT en détail, et expliquer comment mettre en œuvre la génération et la validation du JWT dans WordPress.

Qu'est-ce que JWT ?

JWT est un mécanisme de sécurité couramment utilisé pour l'authentification sans état des API RESTful. Il permet au serveur de valider les jetons transmis, garantissant ainsi l'authenticité de l'identité de l'utilisateur. Le JWT étant crypté lors de sa transmission entre le client et le serveur, il empêche la falsification des informations.

Structure du JWT

Image [2] - Analyse approfondie du guide complet pour la mise en œuvre de l'authentification JWT dans WordPress - Photon Volatility Network | Service professionnel de réparation de WordPress, portée mondiale, réponse rapide

Le JWT se compose de trois parties : l'en-tête, la charge utile et la signature, qui sont reliées par des points (.) pour former un JWT complet, comme indiqué ci-dessous. ), qui sont reliées par des points pour former un JWT complet, comme indiqué ci-dessous :

<code>en-tête.charge utile.signature</code>
<code>en-tête.charge utile.signature</code>
en-tête.charge utile.signature
en-tête.charge utile.signature
en-tête.charge utile.signature
  1. En-tête

Header est un objet JSON contenant deux propriétés :alg(algorithme de signature) et type(Les algorithmes de signature courants sont HS256, RS256, etc.) Les algorithmes de signature courants sont HS256, RS256, etc. L'en-tête sera encodé avec Base64Url pour produire la chaîne suivante :

<code>{
"alg" : "HS256",
"typ" : "JWT"
}</code>
<code>{
  "alg" : "HS256",
  "typ" : "JWT"
}</code>
{
"alg" : "HS256",
"typ" : "JWT"
}
{
  "alg" : "HS256",
  "typ" : "JWT"
}
{ "alg" : "HS256", "typ" : "JWT" }
  1. Charge utile

Un Payload est également un objet JSON contenant des informations sur l'utilisateur et d'autres données commerciales. La déclaration peut être prédéfinie (par ex. issetexpetsous La charge utile est également codée en Base64Url pour produire la chaîne suivante :

<code>{
"sub" : "1234567890",
"name" : "John Doe".
"iat" : 1516239022
}</code>
<code>{
  "sub" : "1234567890",
  "name" : "John Doe".
  "iat" : 1516239022
}</code>
{
"sub" : "1234567890",
"name" : "John Doe".
"iat" : 1516239022
}
{
  "sub" : "1234567890",
  "name" : "John Doe".
  "iat" : 1516239022
}
{ "sub" : "1234567890", "name" : "John Doe". "iat" : 1516239022 }

Les champs prédéfinis sont les suivants

  • iss (émetteur) : la personne qui l'a émis
  • sous (sujet
  • aud (public
  • exp (délai d'expiration) : délai d'expiration
  • nbf (Pas avant) : Date d'entrée en vigueur
  • iat (émis le) : Date d'émission
  • jti (JWT ID) : Identifiant unique
  1. Signature

La signature est utilisée pour garantir l'intégrité et la sécurité du JWT. Elle chiffre l'en-tête, la charge utile et une clé (secrète) à l'aide d'un algorithme de signature. Un exemple est donné ci-dessous :

<code>HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret
)</code>
<code>HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret
)</code>
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret
)
HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret
)
HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret )

La signature générée est ajoutée à la fin du JWT pour former le JWT complet :

<code>eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIwibmFtZSI6IkpvaG4gRG9lIwiaWF0IjoxNTE2MjM5MDIyfQ. SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c</code>
<code>eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIwibmFtZSI6IkpvaG4gRG9lIwiaWF0IjoxNTE2MjM5MDIyfQ. SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c</code>
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIwibmFtZSI6IkpvaG4gRG9lIwiaWF0IjoxNTE2MjM5MDIyfQ. SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIwibmFtZSI6IkpvaG4gRG9lIwiaWF0IjoxNTE2MjM5MDIyfQ. SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIwibmFtZSI6IkpvaG4gRG9lIwiaWF0IjoxNTE2MjM5MDIyfQ. SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

Implémentation de JWT dans WordPress

La mise en œuvre de l'authentification par jeton Web JSON (JWT) dans WordPress implique les étapes suivantes :

Étape 1 : Installer le plugin d'authentification JWT

  1. Connectez-vous à l'interface d'administration de WordPress.
  2. Naviguez jusqu'à plug-in (composant logiciel) > Installation de nouveaux plug-ins.
  3. rechercher qqch. Authentification JWT pour l'API REST de WP.
  4. Installer et activer le plugin.
Image [3] - Analyse approfondie du guide complet pour la mise en œuvre de l'authentification JWT dans WordPress - Photon Volatility Network | Professional WordPress Repair Service, Global Reach, Fast Response

Étape 2 : Configurer le plug-in

  1. Après avoir activé le plugin, naviguez vers Paramètres > Authentification JWT.
  2. Sur la page Paramètres, vous devez configurer les options suivantes :
    • Clé secrète: Il s'agit de la clé utilisée pour signer le JWT. Vous pouvez trouver la clé dans le fichier wp-config.php Ajoutez la ligne de code suivante au fichier pour définir la clé :define('JWT_AUTH_SECRET_KEY', 'your-secret-key') ;
    • Activer CORSActiver cette option si vous avez besoin de requêtes inter-domaines.

Étape 3 : Configurer le fichier .htaccess

dans le répertoire racine de votre site web .htaccess La règle suivante est ajoutée au fichier :

<IfModule mod_rewrite.c><br>RewriteEngine sur<br>RewriteCond %{HTTP:Authorisation} ^(. *)<br>RewriteRule ^(. *) - [E=HTTP_AUTHORIZATION:%1]<br></IfModule><br>
<IfModule mod_rewrite.c><br>RewriteEngine sur<br>RewriteCond %{HTTP:Authorisation} ^(. *)<br>RewriteRule ^(. *) - [E=HTTP_AUTHORIZATION:%1]<br></IfModule><br>
<IfModule mod_rewrite.c>
RewriteEngine sur
RewriteCond %{HTTP:Authorisation} ^(. *)
RewriteRule ^(. *) - [E=HTTP_AUTHORIZATION:%1]
</IfModule>

Étape 4 : Générer un JWT

La fonction suivante permet de générer un JWT :

<code>function wpjam_generate_jwt($payload, $secret='', $header=[]){
// 无法生成没有设置过期时间的 JWT
if(empty($payload['exp'])){
return false;
}
$header = wp_parse_args($header, [
'alg' => 'HS256',
'typ' => 'JWT'
]);
if($header['alg'] == 'HS256'){
$header = base64_urlencode(wpjam_json_encode($header));
$payload = base64_urlencode(wpjam_json_encode($payload));
$jwt = $header.'.'.$payload;
$secret = $secret ?: wp_salt();
return $jwt.'.'.base64_urlencode(hash_hmac('sha256', $jwt, $secret, true));
}
}</code>
<code>function wpjam_generate_jwt($payload, $secret='', $header=[]){
    // 无法生成没有设置过期时间的 JWT
    if(empty($payload['exp'])){
        return false;
    }

    $header = wp_parse_args($header, [
        'alg' => 'HS256',
        'typ' => 'JWT'
    ]);

    if($header['alg'] == 'HS256'){
        $header     = base64_urlencode(wpjam_json_encode($header));
        $payload    = base64_urlencode(wpjam_json_encode($payload));
        $jwt        = $header.'.'.$payload;
        $secret     = $secret ?: wp_salt();

        return $jwt.'.'.base64_urlencode(hash_hmac('sha256', $jwt, $secret, true));
    }
}</code>
function wpjam_generate_jwt($payload, $secret='', $header=[]){
// 无法生成没有设置过期时间的 JWT
if(empty($payload['exp'])){
return false;
}
$header = wp_parse_args($header, [
'alg' => 'HS256',
'typ' => 'JWT'
]);
if($header['alg'] == 'HS256'){
$header = base64_urlencode(wpjam_json_encode($header));
$payload = base64_urlencode(wpjam_json_encode($payload));
$jwt = $header.'.'.$payload;
$secret = $secret ?: wp_salt();
return $jwt.'.'.base64_urlencode(hash_hmac('sha256', $jwt, $secret, true));
}
}
function wpjam_generate_jwt($payload, $secret='', $header=[]){
    // 无法生成没有设置过期时间的 JWT
    if(empty($payload['exp'])){
        return false;
    }

    $header = wp_parse_args($header, [
        'alg' => 'HS256',
        'typ' => 'JWT'
    ]);

    if($header['alg'] == 'HS256'){
        $header     = base64_urlencode(wpjam_json_encode($header));
        $payload    = base64_urlencode(wpjam_json_encode($payload));
        $jwt        = $header.'.'.$payload;
        $secret     = $secret ?: wp_salt();

        return $jwt.'.'.base64_urlencode(hash_hmac('sha256', $jwt, $secret, true));
    }
}
function wpjam_generate_jwt($payload, $secret='', $header=[]){ // 无法生成没有设置过期时间的 JWT if(empty($payload['exp'])){ return false; } $header = wp_parse_args($header, [ 'alg' => 'HS256', 'typ' => 'JWT' ]); if($header['alg'] == 'HS256'){ $header = base64_urlencode(wpjam_json_encode($header)); $payload = base64_urlencode(wpjam_json_encode($payload)); $jwt = $header.'.'.$payload; $secret = $secret ?: wp_salt(); return $jwt.'.'.base64_urlencode(hash_hmac('sha256', $jwt, $secret, true)); } }

Le code ci-dessus commence par l'encodage JSON et l'encodage Base64 sécurisé par URL de l'en-tête et de la charge utile. La clé (Secret) pour générer la signature est générée en utilisant la fonction salt par défaut de WordPress si elle est vide. Enfin, l'en-tête, la charge utile et la signature générée sont liés par le point (.) ) pour former un JWT complet.

Étape 5 : Authentifier le JWT

Le processus de validation du JWT est le processus inverse généré, qui est mis en œuvre comme suit :

<code>function wpjam_verify_jwt($token, $secret=''){
<strong>$okens = explode('.'', $token) ; $oken = explode('. , $token) ;</strong>
if(count($okens) ! = 3){
return false ; }
}
list($header, $payload, $sign) = $okens ;
$jwt = $header.'. .$payload ; $jwt = $header.
$secret = $secret ? : wp_salt() ;
$header = wpjam_json_decode(base64_urldecode($header)) ;
$payload = wpjam_json_decode(base64_urldecode($payload)) ;
if(empty($header['alg']) || $header['alg'] ! = 'HS256'){
return false ; }
}
if(!hash_equals(base64_urlencode(hash_hmac('sha256', $jwt, $secret, true)), $sign)){
return false ;
}
// L'authentification échoue si l'heure d'émission est supérieure à l'heure du serveur actuel
if(isset($payload['iat']) && $payload['iat'] > time()){
return false.
}
// Ne pas accepter le jeton tant que ce temps nbf n'est pas atteint
if(isset($payload['nbf']) && $payload['nbf'] > time()){
return false ;
}
// Aucun délai d'expiration n'est défini, ou le délai d'expiration est inférieur à l'heure actuelle du serveur ; la validation échoue.
if(empty($payload['exp']) || $payload['exp'] < time()){
return false.
}
return $payload.
}</code>
<code>function wpjam_verify_jwt($token, $secret=''){
    <strong>$okens = explode('.'', $token) ; $oken = explode('. , $token) ;</strong>

    if(count($okens) ! = 3){
        return false ; }
    }

    list($header, $payload, $sign) = $okens ;

    $jwt = $header.'. .$payload ; $jwt = $header.
    $secret = $secret ? : wp_salt() ;
    $header = wpjam_json_decode(base64_urldecode($header)) ;
    $payload = wpjam_json_decode(base64_urldecode($payload)) ;

    if(empty($header['alg']) || $header['alg'] ! = 'HS256'){
        return false ; }
    }

    if(!hash_equals(base64_urlencode(hash_hmac('sha256', $jwt, $secret, true)), $sign)){
        return false ;
    }

    // L'authentification échoue si l'heure d'émission est supérieure à l'heure du serveur actuel
    if(isset($payload['iat']) && $payload['iat'] > time()){
        return false.
    }

    // Ne pas accepter le jeton tant que ce temps nbf n'est pas atteint
    if(isset($payload['nbf']) && $payload['nbf'] > time()){
        return false ;
    }

    // Aucun délai d'expiration n'est défini, ou le délai d'expiration est inférieur à l'heure actuelle du serveur ; la validation échoue.
    if(empty($payload['exp']) || $payload['exp'] < time()){
        return false.
    }

    return $payload.
}</code>
function wpjam_verify_jwt($token, $secret=''){
<strong>$okens = explode('.'', $token) ; $oken = explode('. , $token) ;</strong>
if(count($okens) ! = 3){
return false ; }
}
list($header, $payload, $sign) = $okens ;
$jwt = $header.'. .$payload ; $jwt = $header.
$secret = $secret ? : wp_salt() ;
$header = wpjam_json_decode(base64_urldecode($header)) ;
$payload = wpjam_json_decode(base64_urldecode($payload)) ;
if(empty($header['alg']) || $header['alg'] ! = 'HS256'){
return false ; }
}
if(!hash_equals(base64_urlencode(hash_hmac('sha256', $jwt, $secret, true)), $sign)){
return false ;
}
// L'authentification échoue si l'heure d'émission est supérieure à l'heure du serveur actuel
if(isset($payload['iat']) && $payload['iat'] > time()){
return false.
}
// Ne pas accepter le jeton tant que ce temps nbf n'est pas atteint
if(isset($payload['nbf']) && $payload['nbf'] > time()){
return false ;
}
// Aucun délai d'expiration n'est défini, ou le délai d'expiration est inférieur à l'heure actuelle du serveur ; la validation échoue.
if(empty($payload['exp']) || $payload['exp'] < time()){
return false.
}
return $payload.
}
function wpjam_verify_jwt($token, $secret=''){
    <strong>$okens = explode('.'', $token) ; $oken = explode('. , $token) ;</strong>

    if(count($okens) ! = 3){
        return false ; }
    }

    list($header, $payload, $sign) = $okens ;

    $jwt = $header.'. .$payload ; $jwt = $header.
    $secret = $secret ? : wp_salt() ;
    $header = wpjam_json_decode(base64_urldecode($header)) ;
    $payload = wpjam_json_decode(base64_urldecode($payload)) ;

    if(empty($header['alg']) || $header['alg'] ! = 'HS256'){
        return false ; }
    }

    if(!hash_equals(base64_urlencode(hash_hmac('sha256', $jwt, $secret, true)), $sign)){
        return false ;
    }

    // L'authentification échoue si l'heure d'émission est supérieure à l'heure du serveur actuel
    if(isset($payload['iat']) && $payload['iat'] > time()){
        return false.
    }

    // Ne pas accepter le jeton tant que ce temps nbf n'est pas atteint
    if(isset($payload['nbf']) && $payload['nbf'] > time()){
        return false ;
    }

    // Aucun délai d'expiration n'est défini, ou le délai d'expiration est inférieur à l'heure actuelle du serveur ; la validation échoue.
    if(empty($payload['exp']) || $payload['exp'] < time()){
        return false.
    }

    return $payload.
}
function wpjam_verify_jwt($token, $secret=''){ $okens = explode('.'', $token) ; $oken = explode('. , $token) ; if(count($okens) ! = 3){ return false ; } } list($header, $payload, $sign) = $okens ; $jwt = $header.'. .$payload ; $jwt = $header. $secret = $secret ? : wp_salt() ; $header = wpjam_json_decode(base64_urldecode($header)) ; $payload = wpjam_json_decode(base64_urldecode($payload)) ; if(empty($header['alg']) || $header['alg'] ! = 'HS256'){ return false ; } } if(!hash_equals(base64_urlencode(hash_hmac('sha256', $jwt, $secret, true)), $sign)){ return false ; } // L'authentification échoue si l'heure d'émission est supérieure à l'heure du serveur actuel if(isset($payload['iat']) && $payload['iat'] > time()){ return false. } // Ne pas accepter le jeton tant que ce temps nbf n'est pas atteint if(isset($payload['nbf']) && $payload['nbf'] > time()){ return false ; } // Aucun délai d'expiration n'est défini, ou le délai d'expiration est inférieur à l'heure actuelle du serveur ; la validation échoue. if(empty($payload['exp']) || $payload['exp'] < time()){ return false. } return $payload. }

Le code ci-dessus divise d'abord le JWT en segments Header, Payload et Signature via le point (.). Le code ci-dessus divise d'abord le JWT en segments Header, Payload et Signature par le point (.), puis effectue un décodage Base64 et un décodage JSON sécurisés par URL sur le Header et le Payload. La signature est enfin vérifiée par rapport à la clé signée. Si la signature est valide et que le jeton n'a pas expiré, les données utiles sont renvoyées.

Étape 6 : Fonctions d'encodage et de décodage de l'URL Base64

Fonctions d'encodage et de décodage Base64 sécurisées par URL utilisées dans la procédure ci-dessus base64_urlencode répondre en chantant base64_urldecode Elle doit également être définie :

<code>fonction base64_urlencode($data) {
return rtrim(strtr(base64_encode($data), '+/', '-_'), '=') ;
}
function base64_urldecode($data) {
return base64_decode(str_pad(strtr($data, '-_', '+/'), strlen($data) % 4, '=', STR_PAD_RIGHT)) ;
}
</code>
<code>fonction base64_urlencode($data) {
    return rtrim(strtr(base64_encode($data), '+/', '-_'), '=') ;
}

function base64_urldecode($data) {
    return base64_decode(str_pad(strtr($data, '-_', '+/'), strlen($data) % 4, '=', STR_PAD_RIGHT)) ;
}
</code>
fonction base64_urlencode($data) {
return rtrim(strtr(base64_encode($data), '+/', '-_'), '=') ;
}
function base64_urldecode($data) {
return base64_decode(str_pad(strtr($data, '-_', '+/'), strlen($data) % 4, '=', STR_PAD_RIGHT)) ;
}
fonction base64_urlencode($data) {
    return rtrim(strtr(base64_encode($data), '+/', '-_'), '=') ;
}

function base64_urldecode($data) {
    return base64_decode(str_pad(strtr($data, '-_', '+/'), strlen($data) % 4, '=', STR_PAD_RIGHT)) ;
}
fonction base64_urlencode($data) { return rtrim(strtr(base64_encode($data), '+/', '-_'), '=') ; } function base64_urldecode($data) { return base64_decode(str_pad(strtr($data, '-_', '+/'), strlen($data) % 4, '=', STR_PAD_RIGHT)) ; }
Image [4] - Analyse approfondie du guide complet pour la mise en œuvre de l'authentification JWT dans WordPress - Photon Volatility Network | Professional WordPress Repair Service, Global Reach, Fast Response

résumés

faire passer (un projet de loi, une inspection, etc.) wpjam_generate_jwt répondre en chantant wpjam_verify_jwt Ces deux fonctions, qui peuvent être mises en œuvre dans WordPress JWT JWT est un moyen sûr et sans état d'authentifier les utilisateurs et devient de plus en plus populaire dans le développement de sites web modernes.


Contactez nous
Vous ne pouvez pas lire l'article ? Contactez-nous pour une réponse gratuite ! Aide gratuite pour les sites personnels et les sites de petites entreprises !
Tel : 020-2206-9892
QQ咨询:1025174874
(iii) Courriel : info@361sale.com
Horaires de travail : du lundi au vendredi, de 9h30 à 18h30, jours fériés.
© Déclaration de reproduction
Cet article a été écrit par : xiesong
LA FIN
Si vous l'aimez, soutenez-le.
félicitations0 partager (joies, avantages, privilèges, etc.) avec les autres
commentaires achat de canapé

Veuillez vous connecter pour poster un commentaire

    Pas de commentaires