当前位置: 首页 > news >正文

php做购物网站系统/企业网站建设步骤

php做购物网站系统,企业网站建设步骤,手机网站作用,建站之星破解版手机什么是JWTJWT(json web token)是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源。比如用在用户登录上。JWT定义了一种用于简洁,自包…

什么是JWTJWT(json web token)是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。

JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源。比如用在用户登录上。

JWT定义了一种用于简洁,自包含的用于通信双方之间以 JSON 对象的形式安全传递信息的方法。JWT 可以使用 HMAC 算法或者是 RSA 的公钥密钥对进行签名。

JWT有两个特点:

自包含(Self-contained):负载中包含了所有用户所需要的信息,避免了多次查询数据库

简洁(Compact):可以通过URL, POST 参数或者在 HTTP header 发送,因为数据量小,传输速度快

JWT组成

JWT由header,payload,signature三个部分,下面我们用官网的实例先来讲解一个这三个部分的用法。

header部分:

jwt的头部承载两部分信息:

声明类型,这里是jwt

声明加密的算法 通常直接使用 HMAC SHA256

完整的头部就像下面这样的JSON:

{"alg": "HS256","typ": "JWT"
}

对应base64UrlEncode编码为:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9

说明:该字段为json格式。alg字段指定了生成signature的算法,默认值为HS256,typ默认值为JWT

payload部分:

载荷就是存放有效信息的地方。

标准中注册的声明 (建议但不强制使用) :

iss: jwt签发者

sub: jwt所面向的用户

aud: 接收jwt的一方

exp: jwt的过期时间,这个过期时间必须要大于签发时间

nbf: 定义在什么时间之前,该jwt都是不可用的

iat: jwt的签发时间

jti: jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击。

{"sub": "1234567890","name": "John Doe","iat": 1516239022
}

对应base64UrlEncode编码为:

eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ

说明:该字段为json格式,表明用户身份的数据,可以自己自定义字段,很灵活。sub 面向的用户,name 姓名 ,iat 签发时间。例如可自定义示例如下:

{"iss": "admin",     //该JWT的签发者"iat": 1535967430,    //签发时间"exp": 1535974630,    //过期时间"nbf": 1535967430,     //该时间之前不接收处理该Token"sub": "www.admin.com",  //面向的用户"jti": "9f10e796726e332cec401c569969e13e"  //该Token唯一标识
}

signature部分:

jwt的第三部分是一个签证信息,这个签证信息由三部分组成:

  • header (base64后的)
  • payload (base64后的)
  • secret
HMACSHA256(base64UrlEncode(header) + "." +base64UrlEncode(payload),123456
) 

对应的签名为:

keH6T3x1z7mmhKL1T3r9sQdAxxdzB6siemGMr_6ZOwU

最终得到的JWT的json为(header.payload.signature):

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.keH6T3x1z7mmhKL1T3r9sQdAxxdzB6siemGMr_6ZOwU

说明:对header和payload进行base64UrlEncode编码后进行拼接。通过key(这里是123456)进行HS256算法签名。

JWT的使用流程

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

PHP如何实现JWT

这里使用的是PHP 7.0.31,我们新建一个文件jwtAuth.php,完整类代码如下:

<?php
/*** PHP实现jwt*/
class JwtAuth {//头部private static $header=array('alg'=>'HS256', //生成signature的算法'typ'=>'JWT'  //类型);//使用HMAC生成信息摘要时所使用的密钥private static $key='root123456';/*** 获取jwt token* @param array $payload jwt载荷  格式如下非必须* [* 'iss'=>'jwt_admin', //该JWT的签发者* 'iat'=>time(), //签发时间* 'exp'=>time()+7200, //过期时间* 'nbf'=>time()+60, //该时间之前不接收处理该Token* 'sub'=>'www.mano100.cn', //面向的用户* '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;//该nbf时间之前不接收处理该Tokenif (isset($payload['nbf']) && $payload['nbf'] > 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>";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>";echo $token_test;//对token进行验证签名$getPayload_test=Jwt::verifyToken($token_test);echo "<br><br>";var_dump($getPayload_test);echo "<br><br>";//自己使用时候end
以上内容希望帮助到大家,很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家,需要请戳这里链接 或 者关注咱们下面的知乎专栏
PHP架构师圈子​zhuanlan.zhihu.com
29c142c9873358139433e3bc0171e8d5.png
http://www.jmfq.cn/news/5289823.html

相关文章:

  • 公司做网站开发流程/培训机构加盟
  • 做网站时怎么裁切存图/现场直播的视频
  • 关于网站建设的毕业论文/学seo需要学什么专业
  • 设计网站b/旺道优化软件
  • 建设工程类公司网站/网站如何快速推广
  • 网站引导动画/天津百度快速优化排名
  • 360平台怎么做网站优化/资源搜索引擎搜索神器网
  • 淄博网站建设/恶意点击软件有哪些
  • 东莞网站竞价推广/开封seo公司
  • 上海seo网站优化/旺道seo工具
  • 桂林北站离哪个景区近/脚本外链平台
  • 网站建设优秀网站建/整合营销的案例
  • 政务门户网站建设/google国际版
  • 一个公司可以做多少个网站/在线生成个人网站免费
  • 青岛的网站建设公司/网站推广优化招聘
  • 高品质的佛山网站建设/谁有恶意点击软件
  • 校园网站制度建设/网络优化这个行业怎么样
  • 武汉万网站制作 费用/怎么seo网站排名
  • 做网站运营需要学什么/百度知道客服电话
  • 傻瓜建站/合肥seo
  • 南昌网站系统/网站页面优化方案
  • 北京建设工程交易协会网站/百度网站的优化方案
  • 做网站投注代理犯罪吗/软文广告案例500字
  • 工商注册网站/搜索引擎优化常用方法
  • 建设网站八大员成绩查询/品牌运营推广方案
  • 做网站用什么配置的笔记本/山西网络营销seo
  • 商城网站平台/词语搜索排行
  • 手机编程软件中文版免费/百度seo新站优化
  • 中国做的手机系统下载网站/如何建立自己的网站?
  • wordpress 发帖/网站建设优化公司