Maison cadre php PensezPHP Explication détaillée de la façon d'utiliser JWT dans thinkphp6.0.7

Explication détaillée de la façon d'utiliser JWT dans thinkphp6.0.7

Dec 15, 2021 pm 02:51 PM
jwt

La colonne suivante du didacticiel thinkphpframework vous présentera comment utiliser JWT dans thinkphp6.0.7. J'espère qu'elle sera utile aux amis dans le besoin !

Explication super détaillée de l'utilisation de JWT dans thinkphp6.0.7 (code inclus)

Qu'est-ce que JWT

JWT est l'abréviation de json web token. Il crypte les informations utilisateur dans le jeton et le serveur n'enregistre aucune information utilisateur. Le serveur vérifie l'exactitude du jeton en utilisant la clé enregistrée. Tant qu'elle est correcte, la vérification est réussie. L'authentification basée sur un jeton peut remplacer la méthode traditionnelle d'authentification cookie+session.

Authentification de connexion basée sur la session

Dans l'authentification de connexion utilisateur traditionnelle, étant donné que http est sans état, la méthode de session est utilisée. Si l'utilisateur se connecte avec succès, le serveur garantira une session et donnera bien sûr au client un identifiant de session. Le client enregistrera l'identifiant de session dans un cookie et chaque requête portera cet identifiant de session.

Le modèle cookie+session est généralement stocké en mémoire et le service sera confronté à des problèmes de partage de session d'un service unique à plusieurs services. À mesure que le nombre d'utilisateurs augmente, la surcharge augmentera. Ce n'est pas le cas avec JWT. Il nécessite uniquement que le serveur génère un jeton, que le client enregistre le jeton, que chaque requête transporte le jeton et que le serveur l'authentifie et l'analyse.

JWT se compose de trois parties : header.payload.signature

partie d'en-tête :

  {
      "alg": "HS256",
      "typ": "JWT"
    }
Copier après la connexion
对应base64UrlEncode编码为:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
说明:该字段为json格式。alg字段指定了生成signature的算法,默认值为 HS256,typ默认值为JWT
Copier après la connexion

partie de charge utile :

    {
      "sub": "1234567890",
      "name": "John Doe",
      "iat": 1516239022
    }
Copier après la connexion
对应base64UrlEncode编码为:eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ
说明:该字段为json格式,表明用户身份的数据,可以自己自定义字段,很灵活。sub 面向的用户,name 姓名 ,iat 签发时间。例如可自定义示例如下:
Copier après la connexion
  {
        "iss": "admin",           //该JWT的签发者
        "sub": "www.admin.com",   //面向的用户
        “aud”: "zhangsan",        //接收jwt的一方
        "iat": 1535967430,        //签发时间
        "exp": 1535974630,        //过期时间
        "nbf": 1535967430,        //该时间之前不接收处理该Token 
        "jti": "9f10e796726e332cec401c569969e13e"   //该Token唯一标识
    }
Copier après la connexion

partie de signature :

    HMACSHA256(
      base64UrlEncode(header) + "." +
      base64UrlEncode(payload),
      123456
    )
Copier après la connexion
对应的签名为:keH6T3x1z7mmhKL1T3r9sQdAxxdzB6siemGMr_6ZOwU

最终得到的JWT的Token为(header.payload.signature):eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.keH6T3x1z7mmhKL1T3r9sQdAxxdzB6siemGMr_6ZOwU
说明:对header和payload进行base64UrlEncode编码后进行拼接。通过key(这里是123456)进行HS256算法签名。
Copier après la connexion

processus d'utilisation de JWT

初次登录:用户初次登录,输入用户名密码
密码验证:服务器从数据库取出用户名和密码进行验证
生成JWT:服务器端验证通过,根据从数据库返回的信息,以及预设规则,生成JWT
返还JWT:服务器的HTTP RESPONSE中将JWT返还
带JWT的请求:以后客户端发起请求,HTTP REQUEST
HEADER中的Authorizatio字段都要有值,为JWT
服务器验证JWT
Copier après la connexion

version jwt

Il existe plusieurs versions de jwt en php : j'ai choisi la dernière version. Ne demandez pas pourquoi, lorsque vous achetez des produits électroniques, vous en achetez toujours des nouveaux plutôt que des anciens. En regardant l'image, vous pouvez voir que la version 4.1.0 prend en charge plus de paramètres. Les paramètres spécifiques seront expliqués ci-dessous

Explication détaillée de la façon dutiliser JWT dans thinkphp6.0.7
Installer jwt

1 Utiliser composer pour installer

composer nécessite lcobucci/jwt

2 Télécharger depuis github

Cliquez sur moi pour accéder à l'adresse github :https. :// github.com/lcobucci/jwt

Dépend de

PHP 5.5+
OpenSSL扩展
Copier après la connexion

Utilisation

Explication des paramètres

Expliquez la signification des paramètres ci-dessus avant de l'utiliser :
Explication du nom
entité requérante de l'émetteur iss (émetteur), qui peut être l'utilisateur qui a initié la demande L'information peut également être l'émetteur du jwt
sub (Subject) Définir le sujet, similaire au sujet lors de l'envoi d'un email
aud (audience) la partie qui reçoit le jwt
exp (expire) expiration du jeton time
nbf (pas avant) L'heure actuelle est avant l'heure de réglage nbf, le jeton ne peut pas être utilisé
iat (émis à) l'heure de création du jeton
jti (JWT ID) Définir un identifiant unique pour le jeton actuel

Comment pour implémenter JWT en PHP

J'utilise PHP 7.3.4 Pas de bêtises, allez simplement dans le code, créez un nouveau jwt.php, copiez et collez comme suit :

<?php /**
 * PHP实现jwt
 */
class Jwt {
 
    //头部
    private static $header=array(
        &#39;alg&#39;=>'HS256', //生成signature的算法
        'typ'=>'JWT'    //类型
    );
 
    //使用HMAC生成信息摘要时所使用的密钥
    private static $key='123456';
 
 
    /**
     * 获取jwt token
     * @param array $payload jwt载荷   格式如下非必须
     * [
     *  'iss'=>'jwt_admin',  //该JWT的签发者
     *  'iat'=>time(),  //签发时间
     *  'exp'=>time()+7200,  //过期时间
     *  'nbf'=>time()+60,  //该时间之前不接收处理该Token
     *  'sub'=>'www.admin.com',  //面向的用户
     *  'jti'=>md5(uniqid('JWT').time())  //该Token唯一标识
     * ]
     * @return bool|string
     */
    public static function getToken(array $payload)
    {
        if(is_array($payload))
        {
            $base64header=self::base64UrlEncode(json_encode(self::$header,JSON_UNESCAPED_UNICODE));
            $base64payload=self::base64UrlEncode(json_encode($payload,JSON_UNESCAPED_UNICODE));
            $token=$base64header.'.'.$base64payload.'.'.self::signature($base64header.'.'.$base64payload,self::$key,self::$header['alg']);
            return $token;
        }else{
            return false;
        }
    }
 
 
    /**
     * 验证token是否有效,默认验证exp,nbf,iat时间
     * @param string $Token 需要验证的token
     * @return bool|string
     */
    public static function verifyToken(string $Token)
    {
        $tokens = explode('.', $Token);
        if (count($tokens) != 3)
            return false;
 
        list($base64header, $base64payload, $sign) = $tokens;
 
        //获取jwt算法
        $base64decodeheader = json_decode(self::base64UrlDecode($base64header), JSON_OBJECT_AS_ARRAY);
        if (empty($base64decodeheader['alg']))
            return false;
 
        //签名验证
        if (self::signature($base64header . '.' . $base64payload, self::$key, $base64decodeheader['alg']) !== $sign)
            return false;
 
        $payload = json_decode(self::base64UrlDecode($base64payload), JSON_OBJECT_AS_ARRAY);
 
        //签发时间大于当前服务器时间验证失败
        if (isset($payload['iat']) && $payload['iat'] > time())
            return false;
 
        //过期时间小宇当前服务器时间验证失败
        if (isset($payload['exp']) && $payload['exp']  time())
            return false;
 
        return $payload;
    }
 

    /**
     * base64UrlEncode   https://jwt.io/  中base64UrlEncode编码实现
     * @param string $input 需要编码的字符串
     * @return string
     */
    private static function base64UrlEncode(string $input)
    {
        return str_replace('=', '', strtr(base64_encode($input), '+/', '-_'));
    }
 
    /**
     * base64UrlEncode  https://jwt.io/  中base64UrlEncode解码实现
     * @param string $input 需要解码的字符串
     * @return bool|string
     */
    private static function base64UrlDecode(string $input)
    {
        $remainder = strlen($input) % 4;
        if ($remainder) {
            $addlen = 4 - $remainder;
            $input .= str_repeat('=', $addlen);
        }
        return base64_decode(strtr($input, '-_', '+/'));
    }
 
    /**
     * HMACSHA256签名   https://jwt.io/  中HMACSHA256签名实现
     * @param string $input 为base64UrlEncode(header).".".base64UrlEncode(payload)
     * @param string $key
     * @param string $alg   算法方式
     * @return mixed
     */
    private static function signature(string $input, string $key, string $alg = 'HS256')
    {
        $alg_config=array(
            'HS256'=>'sha256'
        );
        return self::base64UrlEncode(hash_hmac($alg_config[$alg], $input, $key,true));
    }
}
 
    //***********测试和官网是否匹配begin****************************
    $payload=array('sub'=>'1234567890','name'=>'John Doe','iat'=>1516239022);
    $jwt=new Jwt;
    $token=$jwt->getToken($payload);
    echo "<pre class="brush:php;toolbar:false">";
    echo $token;
    
    //对token进行验证签名
    $getPayload=$jwt->verifyToken($token);
    echo "<br><br>";
    var_dump($getPayload);
    echo "<br><br>";
    //测试和官网是否匹配end
    
    
    //自己使用测试begin
    $payload_test=array('iss'=>'admin','iat'=>time(),'exp'=>time()+7200,'nbf'=>time(),'sub'=>'www.admin.com','jti'=>md5(uniqid('JWT').time()));;
    $token_test=Jwt::getToken($payload_test);
    echo "<pre class="brush:php;toolbar:false">";
    echo $token_test;
    
    //对token进行验证签名
    $getPayload_test=Jwt::verifyToken($token_test);
    echo "<br><br>";
    var_dump($getPayload_test);
    echo "<br><br>";
    //自己使用时候end
Copier après la connexion

.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment utiliser JWT et JWE pour l'authentification et le chiffrement API en PHP Comment utiliser JWT et JWE pour l'authentification et le chiffrement API en PHP Jun 17, 2023 pm 02:42 PM

Avec le développement d’Internet, de plus en plus de sites Web et d’applications doivent fournir des interfaces API pour l’interaction des données. Dans ce cas, l’authentification et le chiffrement des API deviennent des problèmes très importants. En tant que mécanisme d'authentification et de chiffrement populaire, JWT et JWE sont de plus en plus utilisés en PHP. Eh bien, cet article expliquera comment utiliser JWT et JWE pour l'authentification et le chiffrement API en PHP. Concepts de base de JWT JWT signifie JSONWe

Comment utiliser ThinkPHP6 pour l'authentification JWT ? Comment utiliser ThinkPHP6 pour l'authentification JWT ? Jun 12, 2023 pm 12:18 PM

JWT (JSONWebToken) est un mécanisme léger d'authentification et d'autorisation qui utilise des objets JSON comme jetons de sécurité pour transmettre en toute sécurité les informations d'identité des utilisateurs entre plusieurs systèmes. ThinkPHP6 est un framework MVC efficace et flexible basé sur le langage PHP. Il fournit de nombreux outils et fonctions utiles, notamment le mécanisme d'authentification JWT. Dans cet article, nous présenterons comment utiliser ThinkPHP6 pour l'authentification JWT afin de garantir la sécurité et la fiabilité des applications Web.

Analyse de la technologie sécurisée de génération et de vérification de jetons JWT en PHP Analyse de la technologie sécurisée de génération et de vérification de jetons JWT en PHP Jul 01, 2023 pm 06:06 PM

Analyse de la technologie sécurisée de génération et de vérification de jetons JWT en PHP Avec le développement des applications réseau, l'authentification et l'autorisation des utilisateurs deviennent de plus en plus importantes. JsonWebToken (JWT) est un standard ouvert (RFC7519) permettant de transmettre en toute sécurité des informations dans les applications Web. Dans le développement PHP, il est devenu courant d'utiliser des jetons JWT pour l'authentification et l'autorisation des utilisateurs. Cet article présentera la technologie sécurisée de génération et de vérification de jetons JWT en PHP. 1. Connaissance de base de JWT pour comprendre comment générer et

OAuth en PHP : créer un serveur d'autorisation JWT OAuth en PHP : créer un serveur d'autorisation JWT Jul 28, 2023 pm 05:27 PM

OAuth en PHP : création d'un serveur d'autorisation JWT Avec l'essor des applications mobiles et la tendance à la séparation du front-end et du back-end, OAuth est devenu un élément indispensable des applications Web modernes. OAuth est un protocole d'autorisation qui protège les ressources des utilisateurs contre tout accès non autorisé en fournissant des processus et des mécanismes standardisés. Dans cet article, nous apprendrons comment créer un serveur d'autorisation OAuth basé sur JWT (JSONWebTokens) à l'aide de PHP. JWT est un type de

Un guide complet pour implémenter l'authentification de connexion dans Vue.js (API, JWT, axios) Un guide complet pour implémenter l'authentification de connexion dans Vue.js (API, JWT, axios) Jun 09, 2023 pm 04:04 PM

Vue.js est un framework JavaScript populaire pour créer des applications Web dynamiques. La mise en œuvre de l’authentification de connexion des utilisateurs est l’une des parties nécessaires au développement d’applications Web. Cet article présentera un guide complet sur la mise en œuvre de la vérification de connexion à l'aide de Vue.js, API, JWT et axios. Création d'une application Vue.js Tout d'abord, nous devons créer une nouvelle application Vue.js. Nous pouvons créer une application Vue.js à l'aide de VueCLI ou manuellement. Installer axiosax

Analyse approfondie des principes et de l'utilisation de JWT (JSON Web Token) Analyse approfondie des principes et de l'utilisation de JWT (JSON Web Token) Jan 10, 2023 am 10:55 AM

Cet article vous apporte des connaissances pertinentes sur JWT. Il présente principalement qu'est-ce que JWT ? Quel est le principe et l’utilisation de JWT ? Pour ceux que cela intéresse, jetons un coup d’œil ci-dessous, j’espère que cela sera utile à tout le monde.

Comment SpringBoot combine JWT pour implémenter le contrôle des autorisations de connexion Comment SpringBoot combine JWT pour implémenter le contrôle des autorisations de connexion May 20, 2023 am 11:01 AM

Nous devons d'abord importer le package jwt utilisé : io.jsonwebtokenjjwt0.8.0com.auth0java-jwt3.2.0 1. Préparez LoginUser (stocker les informations de connexion de l'utilisateur) et JwtUserLoginUser.javapublicclassLoginUser{privateIntegeruserId;privateStringusername;privateStringpassword;privateStringrole;generate getters and setters . ..}JwtUser.javaimp

Développement Golang : implémentation de l'authentification utilisateur basée sur JWT Développement Golang : implémentation de l'authentification utilisateur basée sur JWT Sep 20, 2023 am 08:31 AM

Développement Golang : mise en œuvre de l'authentification des utilisateurs basée sur JWT Avec le développement rapide d'Internet, l'authentification des utilisateurs est devenue un élément crucial des applications Web. La méthode d'authentification traditionnelle basée sur les cookies a été progressivement remplacée par la méthode d'authentification basée sur JWT (JSONWebToken). JWT est une norme d'authentification légère qui permet au serveur de générer un jeton crypté et d'envoyer le jeton au client. Le client place le jeton dans Authori lors de l'envoi d'une demande.

See all articles