日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

php實(shí)現(xiàn)JWT驗(yàn)證的實(shí)例教程

瀏覽:150日期:2022-09-08 16:31:11

JWT,全稱 Json web token,是為了在網(wǎng)絡(luò)應(yīng)用環(huán)境間傳遞聲明而執(zhí)行的一種基于JSON的開(kāi)放標(biāo)準(zhǔn)((RFC 7519).該token被設(shè)計(jì)為緊湊且安全的,特別適用于分布式站點(diǎn)的單點(diǎn)登錄(SSO)場(chǎng)景。JWT的聲明一般被用來(lái)在身份提供者和服務(wù)提供者間傳遞被認(rèn)證的用戶身份信息,以便于從資源服務(wù)器獲取資源,也可以增加一些額外的其它業(yè)務(wù)邏輯所必須的聲明信息,該token也可直接被用于認(rèn)證,也可被加密。

php實(shí)現(xiàn)JWT,本例使用thinkphp框架,代碼如下:

在vendor包中建立Jwt.php,建立類文件

class Jwt { //頭部 private static $header=array( ’alg’=>’HS256’, //生成signature的算法 ’typ’=>’JWT’ //類型 ); //使用HMAC生成信息摘要時(shí)所使用的密鑰 private static $key=’123456’; /** * 獲取jwt token * @param array $payload jwt載荷 格式如下非必須 * [ * ’iss’=>’jwt_admin’, //該JWT的簽發(fā)者 * ’iat’=>time(), //簽發(fā)時(shí)間 * ’exp’=>time()+7200, //過(guò)期時(shí)間 * ’nbf’=>time()+60, //該時(shí)間之前不接收處理該Token * ’sub’=>’www.admin.com’, //面向的用戶 * ’jti’=>md5(uniqid(’JWT’).time()) //該Token唯一標(biāo)識(shí) * ] * @return bool|string */ public static function getToken($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; } } /** * 驗(yàn)證token是否有效,默認(rèn)驗(yàn)證exp,nbf,iat時(shí)間 * @param string $Token 需要驗(yàn)證的token * @return bool|string */ public static function verifyToken($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; //簽名驗(yàn)證 if (self::signature($base64header . ’.’ . $base64payload, self::$key, $base64decodeheader[’alg’]) !== $sign) return false; $payload = json_decode(self::base64UrlDecode($base64payload), JSON_OBJECT_AS_ARRAY); //簽發(fā)時(shí)間大于當(dāng)前服務(wù)器時(shí)間驗(yàn)證失敗 if (isset($payload[’iat’]) && $payload[’iat’] > time()) return false; //過(guò)期時(shí)間小宇當(dāng)前服務(wù)器時(shí)間驗(yàn)證失敗 if (isset($payload[’exp’]) && $payload[’exp’] < time()) return false; //該nbf時(shí)間之前不接收處理該Token if (isset($payload[’nbf’]) && $payload[’nbf’] > time()) return false; return $payload; } /** * base64UrlEncode https://jwt.io/ 中base64UrlEncode編碼實(shí)現(xiàn) * @param string $input 需要編碼的字符串 * @return string */ private static function base64UrlEncode($input) { return str_replace(’=’, ’’, strtr(base64_encode($input), ’+/’, ’-_’)); } /** * base64UrlEncode https://jwt.io/ 中base64UrlEncode解碼實(shí)現(xiàn) * @param string $input 需要解碼的字符串 * @return bool|string */ private static function base64UrlDecode($input) { $remainder = strlen($input) % 4; if ($remainder) { $addlen = 4 - $remainder; $input .= str_repeat(’=’, $addlen); } return base64_decode(strtr($input, ’-_’, ’+/’)); } /** * HMACSHA256簽名 https://jwt.io/ 中HMACSHA256簽名實(shí)現(xiàn) * @param string $input 為base64UrlEncode(header).'.'.base64UrlEncode(payload) * @param string $key * @param string $alg 算法方式 * @return mixed */ private static function signature($input, $key, $alg = ’HS256’) { $alg_config=array( ’HS256’=>’sha256’ ); return self::base64UrlEncode(hash_hmac($alg_config[$alg], $input, $key,true)); }}

調(diào)用JWT驗(yàn)證的方法,代碼如下:

1.構(gòu)建token方法

public function makeToken(){ $uname=$this->uname;$currtime=time(); if(empty($this->uname)){ echo json_encode(array(’code’=>-1,’msg’=>’[主賬號(hào)]參數(shù)為空’),JSON_UNESCAPED_UNICODE);exit(); } .... //jwt驗(yàn)證 vendor('Jwt.Jwt'); $jwt = new Jwt();//這里構(gòu)造jwt參數(shù),可以參照jwt規(guī)范,各字段可以自行定義內(nèi)容 $payload=array(’iss’=>’xesport’,’sub’=>’xxx_player’,’name’=>$playerName,’iat’=>$currtime,’jti’=>md5(uniqid(’JWT’).$currtime)); $token=$jwt->getToken($payload); $this->token=$token; $url=’http://xxx?token=’.$token; $data=array(’url’=>$url); echo json_encode(array(’code’=>1,’data’=>$data,),JSON_UNESCAPED_UNICODE); exit(); }

2.驗(yàn)證token的方法

//驗(yàn)證tokenpublic function verifyToken(){ $token=$_REQUEST[’token’]; if(empty($token)){ echo json_encode(array(’code’=>-1,’msg’=>’[token]參數(shù)為空!’),JSON_UNESCAPED_UNICODE);exit(); } vendor('Jwt.Jwt'); $jwt = new Jwt(); $res_token=$jwt->verifyToken($token); //var_dump(’res_token==’,$res_token); if(empty($res_token)){ echo json_encode(array(’code’=>-2,’msg’=>’[token]驗(yàn)證失敗!’),JSON_UNESCAPED_UNICODE);exit(); } $playerName=$res_token[’name’]; //echo $playerName; die; 這里可以寫從數(shù)據(jù)庫(kù)查詢驗(yàn)證user是否存在,返回 $userInfo if(empty($userInfo)){ echo json_encode(array(’code’=>-3,’msg’=>’[token]驗(yàn)證用戶無(wú)效!’),JSON_UNESCAPED_UNICODE);exit(); } $data=array(’username’=>$playerName); echo json_encode(array(’code’=>1,’data’=>$data,’msg’=>’[token]驗(yàn)證成功’),JSON_UNESCAPED_UNICODE);exit();}

這樣,我們通過(guò)控制器方法調(diào)用該方法,傳遞參數(shù)token,就可以解析token中包含的認(rèn)證憑據(jù)信息,從而做后續(xù)業(yè)務(wù)處理邏輯。

到此這篇關(guān)于php實(shí)現(xiàn)JWT驗(yàn)證的文章就介紹到這了,更多相關(guān)php實(shí)現(xiàn)JWT驗(yàn)證內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: PHP
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久青草久久| 人人爽香蕉精品| 日本精品久久| 最新国产精品| 国产精品7m凸凹视频分类| 久久国产小视频| 亚洲www啪成人一区二区| 免费一二一二在线视频| 成人亚洲欧美| 久久婷婷激情| 99国产精品自拍| 麻豆精品91| 午夜电影一区| 丝袜美腿亚洲色图| 亚洲精品美女| 国产欧美一级| 精品国产免费人成网站| 婷婷成人综合| 99综合视频| 精品91久久久久| 久久国产精品亚洲77777| 视频国产精品| 国产美女精品视频免费播放软件| 国产调教精品| 嫩草伊人久久精品少妇av杨幂| 麻豆精品视频在线观看免费| 精品视频国产| 色88888久久久久久影院| 欧美日韩免费观看一区=区三区| 樱桃成人精品视频在线播放| 免费观看在线综合色| 日韩av网站在线免费观看| 国产精品九九| 欧美黄色网页| 五月天综合网站| 日本不卡高清| 中文亚洲欧美| 日韩国产欧美在线视频| 国产精品1区| 国产麻豆久久| 中文字幕日本一区二区| 国产极品一区| 国产一在线精品一区在线观看| 一区二区电影| 国产一区二区三区四区大秀| 国产精品7m凸凹视频分类| 日本欧美一区| 欧产日产国产精品视频| 丝袜美腿高跟呻吟高潮一区| 日韩欧美激情电影| 欧美日韩免费观看视频| 亚洲人成亚洲精品| 成人在线免费观看91| 欧美日韩少妇| 你懂的亚洲视频| 中国女人久久久| 麻豆国产精品一区二区三区| 激情婷婷综合| 国产精品毛片视频| 欧美不卡在线| 国产日本精品| 欧美亚洲国产一区| 欧美欧美黄在线二区| 久久人人99| 日韩欧美在线精品| 日韩精品一区二区三区免费观看| 亚洲精品影视| 成人精品中文字幕| 国产视频一区二| 欧美精品一区二区久久| 国产精品尤物| 日韩一级精品| 国语精品一区| 涩涩涩久久久成人精品| 另类中文字幕国产精品| 欧美片第1页综合| 99国产精品自拍| 电影91久久久| 日韩国产在线一| 久久免费黄色| 麻豆国产91在线播放| 亚洲综合婷婷| 蜜桃成人av| 精品捆绑调教一区二区三区 | 丝袜av一区| 欧美视频二区| 九一国产精品| 伊人久久av| 卡一卡二国产精品| 91欧美在线| 另类综合日韩欧美亚洲| 久热综合在线亚洲精品| 日韩精品1区| 国产精品久久久免费| 视频一区日韩精品| 亚洲一区黄色| 欧美日中文字幕| 色偷偷色偷偷色偷偷在线视频| 国产欧美一级| 日韩一区二区三区免费视频| 尤物在线精品| 免费福利视频一区二区三区| 国产精品.xx视频.xxtv| 日韩国产欧美视频| 免费在线观看成人| 136国产福利精品导航网址| 国产免费av国片精品草莓男男 | 国产麻豆一区二区三区| 亚洲图片久久| 亚洲欧洲专区| 亚洲午夜国产成人| 一区二区国产在线观看| 视频一区欧美精品| 亚洲大全视频| 国产高清久久| 亚洲五月婷婷| 国产韩日影视精品| 九一国产精品| 亚洲精品91| 久久精品免费一区二区三区 | 国产精品久久久久久久久久妞妞| 日韩综合小视频| 日韩三级精品| 欧美永久精品| 久久a爱视频| 欧美激情91| 老司机免费视频一区二区| 麻豆极品一区二区三区| 欧美国产极品| 九九久久国产| 国产精品欧美一区二区三区不卡| 热久久免费视频| 中文精品电影| 婷婷五月色综合香五月| 日韩av电影一区| 久久99久久人婷婷精品综合| 久久精品国产999大香线蕉| 国产一区2区| 成人羞羞在线观看网站| 婷婷亚洲综合| 少妇高潮一区二区三区99| 国产九九精品| 9999国产精品| 韩日一区二区三区| 中文字幕一区二区三区四区久久 | 国内揄拍国内精品久久| 一区二区三区四区日本视频| 久久免费大视频| 视频一区二区国产| 日本91福利区| 国产一区2区在线观看| 国产一区观看| 亚洲精品欧美| 另类综合日韩欧美亚洲| av资源亚洲| 免费日韩精品中文字幕视频在线| 亚洲精品乱码| 美女视频免费精品| 亚洲成人国产| 亚洲精品系列| 国产精品成久久久久| 久久影视一区| 日本不卡高清| 日韩欧美一区二区三区免费看| 在线 亚洲欧美在线综合一区| 日本在线不卡视频| 亚洲国产福利| 久久一二三区| 精品美女久久| 国产精品99一区二区| 亚洲人成亚洲精品| 成人午夜网址| 香蕉久久久久久久av网站| 日韩国产精品久久久久久亚洲| 国产va免费精品观看精品视频| 久久久久久久久久久9不雅视频| 亚洲一区网站| 国产精品香蕉| 91精品电影| 国产欧美高清视频在线| 1024精品一区二区三区| 欧美精品国产白浆久久久久| 久久亚洲成人| 国产精品传媒麻豆hd| 欧美亚洲国产一区| 日韩av中文字幕一区二区三区| 中文字幕在线视频久| 亚洲精品免费观看| 久久久精品久久久久久96| 欧美日本不卡高清| 欧美在线资源| 久久精品一区| 蜜臀国产一区二区三区在线播放 | 日韩专区在线视频| 成人污污视频| 亚洲精品成a人ⅴ香蕉片| 国产一区二区三区不卡av| 男人的天堂久久精品| 韩国三级一区| 国产精品白丝久久av网站|