![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](https://www.361sale.com/wp-content/uploads/2024/07/2024072307462094.png)
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](https://www.361sale.com/wp-content/uploads/2024/07/2024072307543861.png)
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.signatureen-tête.charge utile.signatureen-tête.charge utile.signature
- 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" }
- 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. iss
etexp
etsous
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 émissous
(sujetaud
(publicexp
(délai d'expiration) : délai d'expirationnbf
(Pas avant) : Date d'entrée en vigueuriat
(émis le) : Date d'émissionjti
(JWT ID) : Identifiant unique
- 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_adQssw5ceyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIwibmFtZSI6IkpvaG4gRG9lIwiaWF0IjoxNTE2MjM5MDIyfQ. SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5ceyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.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
- Connectez-vous à l'interface d'administration de WordPress.
- Naviguez jusqu'à plug-in (composant logiciel) > Installation de nouveaux plug-ins.
- rechercher qqch. Authentification JWT pour l'API REST de WP.
- 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](https://www.361sale.com/wp-content/uploads/2024/07/2024072307590722.png)
Étape 2 : Configurer le plug-in
- Après avoir activé le plugin, naviguez vers Paramètres > Authentification JWT.
- 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.
- Clé secrète: Il s'agit de la clé utilisée pour signer le JWT. Vous pouvez trouver la clé dans le fichier
É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=[]){// 无法生成没有设置过期时间的 JWTif(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=[]){// 无法生成没有设置过期时间的 JWTif(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 actuelif(isset($payload['iat']) && $payload['iat'] > time()){return false.}// Ne pas accepter le jeton tant que ce temps nbf n'est pas atteintif(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 actuelif(isset($payload['iat']) && $payload['iat'] > time()){return false.}// Ne pas accepter le jeton tant que ce temps nbf n'est pas atteintif(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](https://www.361sale.com/wp-content/uploads/2024/06/2024061301281171.png)
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.
Lien vers cet article :https://www.361sale.com/fr/14448
L'article est protégé par le droit d'auteur et doit être reproduit avec mention.
Pas de commentaires