TP6 使用jwt生成token加密解密

本文介绍了如何在PHP项目中利用Composer安装php-jwt库,然后在代码中生成和解密JWTToken。详细步骤包括设置秘钥、创建生成Token的方法、解密Token的方法,并展示了在TP6框架的中间件中应用Token验证的示例。

第一步 composer安装php-jwt插件(不止TP框架的其他框架也可以基本流程一样)

composer require firebase/php-jwt

第二步 在需要使用jwt的地方引用一下代码(建议直接在common公共文件中创建,使用时直接调用)


use Firebase\JWT\JWT;
use Firebase\JWT\Key;//key也要引用哦!

第三步 生成token方法 (建议直接放在公共文件中 common.php)


	/**
	 * Created by PhpStorm.
	 * @purpose 生成Token
	 * @Author: Linxy
	 * @Time: 2022/12/15 13:45
	 */
	function signToken($param): string
	{
		// $key='123ABC)!$';  //这里自定义秘钥,需要和解密是保持一致!
		$key = Env::get('JWT.KEY'); // 我封装在env里面了 
		
		$keyId = Env::get('JWT.KEY_ID');
		$onlyCode = uuid();
		$data['id'] = $id;
		$data['onlyCode'] = $onlyCode;
		$res = 查询数据库数据 或者更新登录时间参数
		$payload = array(
			"iss" => 'weixin',         //签发者 可以为空
			"aud" => 'spospone',       //面象的用户,可以为空
			"iat" => time(),           //签发时间
			'iat' => time(),			 // 开始时间
			'exp' => time() + Env::get
JWT(JSON Web Token)是一种用于身份验证的开放标准(RFC 7519)。它是基于JSON(JavaScript Object Notation)格式的数据结构,由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。 JWT的加密/解密过程可以采用对称加密或非对称加密。对称加密使用同一个密钥进行加密和解密,而非对称加密使用公钥加密,私钥解密。 以下是JWT使用对称加密和非对称加密的加密/解密过程: 1. 对称加密 加密过程: 1)将头部和载荷进行Base64编码,得到第一部分:Base64UrlEncode(header) + "." + Base64UrlEncode(payload)。 2)使用密钥对第一部分进行加密。 3)对加密后的结果进行Base64UrlEncode,得到第三部分:Base64UrlEncode(signature)。 解密过程: 1)将JWT字符串按照“.”分割成三部分。 2)使用密钥对第一部分进行解密。 3)对解密后的结果进行Base64解码,得到头部和载荷。 4)对解密后的结果和密钥进行签名验证。 2. 非对称加密 加密过程: 1)将头部和载荷进行Base64编码,得到第一部分:Base64UrlEncode(header) + "." + Base64UrlEncode(payload)。 2)使用私钥对第一部分进行签名。 3)对签名后的结果进行Base64UrlEncode,得到第三部分:Base64UrlEncode(signature)。 解密过程: 1)将JWT字符串按照“.”分割成三部分。 2)对第一部分和第三部分进行Base64解码,得到头部、载荷和签名。 3)使用公钥对签名进行验证。 4)验证通过后,得到解密后的头部和载荷。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值