亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

PHP JWT初識及其簡單示例

2024-05-05 00:05:34
字體:
來源:轉載
供稿:網友

一直沒有好好看過jwt,直到前兩天要做web驗證,朋友給我推薦了jwt。才發現jwt已經被大家廣泛的應用了??磥砦矣悬cout了。哈哈,趁著這個世界來好好看看這個。

JWT(JSON Web Token), 顧名思義就是可以在Web上傳輸的token,這種token是用JSON格式進行format的。它是一個開源標準(RFC 7519),定義了一個緊湊的自包含的方式在不同實體之間安全的用JSON格式傳輸信息。

由于現在很多項目都是前后端分離,restful api模式。所以傳統的session模式就沒有辦法滿足認證需求,這個時候jwt的作用就來了。可以說 restful api認證是jwt的一個很好的應用場景。

參數解釋

 

名稱 解釋
iss (issuer) issuer 請求實體,可以是發起請求的用戶的信息,也可是jwt的簽發者
sub (Subject) 設置主題,類似于發郵件時的主題
aud (audience) 接收jwt的一方
exp (expire) token過期時間
nbf (not before) 當前時間在nbf設定時間之前,該token無法使用
iat (issued at) token創建時間
jti (JWT ID) 對當前token設置唯一標示

 

下面是一個很小的demo

<?phprequire_once 'src/JWT.php';header('Content-type:application/json');//定義Keyconst KEY = 'dasjdkashdwqe1213dsfsn;p';$user = [  'uid'=>'dadsa-12312-vsd1s1-fsds',  'account'=>'daisc',  'password'=>'123456'];$redis = redis();$action = $_GET['action'];switch ($action){  case 'login':    login();    break;  case 'info':    info();    break;}//登陸,寫入驗證tokenfunction login(){  global $user;  $account = $_GET['account'];  $pwd = $_GET['password'];  $res = [];  if($account==$user['account']&&$pwd==$user['password'])  {    unset($user['password']);    $time = time();    $token = [      'iss'=>'http://test.cc',//簽發者      'iat'=>$time,      'exp'=>$time+60,      'data'=>$user    ];    $jwt = /Firebase/JWT/JWT::encode($token,KEY);    $res['code'] = 200;    $res['message'] = '登錄成功';    $res['jwt'] = $jwt;  }  else  {    $res['message']= '用戶名或密碼錯誤';    $res['code'] = 401;  }  exit(json_encode($res));}function info(){  $jwt = $_SERVER['HTTP_AUTHORIZATION'] ?? false;  $res['code'] = 200;  if($jwt)  {    $jwt = str_replace('Bearer ','',$jwt);    if(empty($jwt))    {      $res['code'] = 401;      $res['msg'] = 'You do not have permission to access.';      exit(json_encode($res));    }    try{      $token = (array) /Firebase/JWT/JWT::decode($jwt,KEY, ['HS256']);      if($token['exp']<time())      {        $res['code'] = 401;        $res['msg'] = '登錄超時,請重新登錄';      }      $res['data']= $token['data'];    }catch (/Exception $E)    {      $res['code'] = 401;      $res['msg'] = '登錄超時,請重新登錄.';    }  }  else  {    $res['code'] = 401;    $res['msg'] = 'You do not have permission to access.';  }  exit(json_encode($res));}//連接redisfunction redis(){  $redis = new Redis();  $redis->connect('127.0.0.1');  return $redis;}

這個dmeo里面用jwt做了一個簡單的認證。 其中用到了一個php-jwt的加密包https://github.com/firebase/php-jwt

其中KEY為定義的私鑰也就是jwt里面的 sign部分,這個一定要保存好。
而header部分php-jwt包里面已經幫我們完成了,加密代碼如下

  public static function encode($payload, $key, $alg = 'HS256', $keyId = null, $head = null)  {    $header = array('typ' => 'JWT', 'alg' => $alg);    if ($keyId !== null) {      $header['kid'] = $keyId;    }    if ( isset($head) && is_array($head) ) {      $header = array_merge($head, $header);    }    $segments = array();    $segments[] = static::urlsafeB64Encode(static::jsonEncode($header));    $segments[] = static::urlsafeB64Encode(static::jsonEncode($payload));    $signing_input = implode('.', $segments);    $signature = static::sign($signing_input, $key, $alg);    $segments[] = static::urlsafeB64Encode($signature);    return implode('.', $segments);  }

可以看出默認的加密的方式是HS256。這也是說jwt安全的原因?,F階段HS256加密還是很安全的。
這個包里面也支持證書加密。

加密解密的過程這個包已經幫我們完成了。所以我們只需要定義jwt中的 poyload部分就可以了。也就是demo里面的token部分。加密成功會得到一個加密的Jwt字符串,下次前端在請求api的時候需要攜帶這個jwt字符串作為認證。
在header頭里面增加Authorization。在服務端驗證的時候回通過取得這個值來驗證回話的有效。

下面是poyload的一些常用配置

 $token  = [      #非必須。issuer 請求實體,可以是發起請求的用戶的信息,也可是jwt的簽發者。      "iss"    => "http://example.org",      #非必須。issued at。 token創建時間,unix時間戳格式      "iat"    => $_SERVER['REQUEST_TIME'],      #非必須。expire 指定token的生命周期。unix時間戳格式      "exp"    => $_SERVER['REQUEST_TIME'] + 7200,      #非必須。接收該JWT的一方。      "aud"    => "http://example.com",      #非必須。該JWT所面向的用戶      "sub"    => "jrocket@example.com",      # 非必須。not before。如果當前時間在nbf里的時間之前,則Token不被接受;一般都會留一些余地,比如幾分鐘。      "nbf"    => 1357000000,      # 非必須。JWT ID。針對當前token的唯一標識      "jti"    => '222we',      # 自定義字段      "GivenName" => "Jonny",      # 自定義字段      "name"  => "Rocket",      # 自定義字段      "Email"   => "jrocket@example.com",         ];

里面包含的配置可以自由配置,也可以自己添加一些其他的。這些都是網上大家常用的,可以說是一種約定吧。

注意事項

關于jwt的使用大概就是這些。上面的代碼在你使用的時候可能會出現兩個問題:

1、命名空間錯誤 
解決:不使用命名空間的話,使用require引入文件。如果使用命名空間出現錯誤,請檢查命名空間的路徑。

2、生成的token是一個對象 
解決:(string)$token 將token強轉成string

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美一级电影久久| 26uuu另类亚洲欧美日本老年| 国产精品视频一| 国内精品久久久久久中文字幕| 国产中文字幕91| 亚洲第一网站男人都懂| 青青在线视频一区二区三区| 日本电影亚洲天堂| 亚洲电影免费观看高清完整版在线观看| 欧美午夜片在线免费观看| 国产小视频91| 久久免费精品日本久久中文字幕| 青青久久aⅴ北条麻妃| 麻豆国产精品va在线观看不卡| 久久综合色88| 国产精品一区二区久久精品| 欧美性受xxxx黑人猛交| 在线一区二区日韩| 欧美成人激情视频免费观看| 欧美激情18p| 国产精品扒开腿爽爽爽视频| 国产精品自产拍在线观看中文| 中文字幕av一区二区| 55夜色66夜色国产精品视频| 成人在线一区二区| 国产欧美最新羞羞视频在线观看| 欧美精品少妇videofree| 97精品久久久中文字幕免费| 日产精品久久久一区二区福利| 欧美日韩视频在线| 18一19gay欧美视频网站| 欧美成人第一页| 日韩欧美第一页| 国产综合在线观看视频| 精品久久久精品| 91九色单男在线观看| 日韩av第一页| 97在线视频观看| 26uuu亚洲伊人春色| 亚洲人成在线观看网站高清| 成人精品久久久| 亚洲国产精品久久| 国产精品精品视频一区二区三区| 国产亚洲美女精品久久久| 精品欧美一区二区三区| 最近2019中文免费高清视频观看www99| 欧美激情第一页xxx| 亚洲精品国产精品国产自| 成人乱人伦精品视频在线观看| 韩国v欧美v日本v亚洲| 亚洲人午夜精品免费| 国产精品扒开腿做爽爽爽视频| 日韩精品中文字幕在线播放| 一本色道久久综合狠狠躁篇怎么玩| 日韩精品黄色网| 精品美女永久免费视频| 国产成人精品国内自产拍免费看| 亚洲精品乱码久久久久久金桔影视| 成人福利视频在线观看| 国产噜噜噜噜噜久久久久久久久| 日韩激情视频在线播放| 日本成人激情视频| 国产精品中文字幕久久久| 亚洲男人av电影| 欧美成人小视频| 久久久成人精品视频| 色偷偷av亚洲男人的天堂| 北条麻妃一区二区在线观看| 77777少妇光屁股久久一区| 国产伦精品一区二区三区精品视频| 亚洲国产日韩欧美在线动漫| 高清在线视频日韩欧美| 欧美另类极品videosbestfree| 亚洲电影免费观看高清完整版在线观看| 91精品国产综合久久香蕉| 国产成+人+综合+亚洲欧洲| 成人有码在线视频| 欧美精品www在线观看| 亚洲国产欧美在线成人app| www.色综合| 国产精品盗摄久久久| 91高潮精品免费porn| 亚洲欧洲av一区二区| 国产不卡av在线免费观看| 欧美xxxwww| 久久成人18免费网站| 欧美在线观看一区二区三区| 久久电影一区二区| 久久精品在线视频| www.日韩.com| 成人有码在线视频| 在线观看久久av| 久久91精品国产91久久久| 亚洲国产精品免费| 欧美日韩中文在线观看| 日韩高清电影好看的电视剧电影| 欧美激情极品视频| 日韩美女免费观看| 米奇精品一区二区三区在线观看| 91精品国产色综合久久不卡98| 最近2019年好看中文字幕视频| 国产精品美女主播| 福利一区福利二区微拍刺激| 欧美最顶级的aⅴ艳星| 92福利视频午夜1000合集在线观看| 亚洲美女性生活视频| 欧美刺激性大交免费视频| 全球成人中文在线| 亚洲精品久久久久久下一站| 麻豆国产va免费精品高清在线| 亚洲国产私拍精品国模在线观看| 98精品国产高清在线xxxx天堂| 欧美亚洲另类制服自拍| 国产欧美精品在线| 日韩欧美在线第一页| 久久久成人av| 亚洲第一页自拍| 97香蕉久久夜色精品国产| www.日韩欧美| 亚洲第一福利网站| 日本午夜在线亚洲.国产| 久久777国产线看观看精品| 精品久久久久国产| 日韩精品丝袜在线| 日韩女优人人人人射在线视频| 亚洲成人av资源网| 欧美xxxx14xxxxx性爽| 91美女高潮出水| 欧美日韩一区二区在线| 久久久久一本一区二区青青蜜月| 在线观看免费高清视频97| 国产精品嫩草影院久久久| 国产成人aa精品一区在线播放| 1769国内精品视频在线播放| 秋霞成人午夜鲁丝一区二区三区| 亲子乱一区二区三区电影| 亚洲国产精品久久久久久| 亚洲国产天堂网精品网站| 日韩成人中文字幕| 日韩中文字幕网址| 久久频这里精品99香蕉| 亚洲精品一区久久久久久| 欧美性猛交xxxx富婆弯腰| 欧美成人在线网站| 日韩欧美成人网| 欧美性xxxxx| 欧美黑人极品猛少妇色xxxxx| 国产91精品久久久久久| 在线播放国产一区中文字幕剧情欧美| 欧美另类第一页| 欧美野外猛男的大粗鳮| 自拍偷拍亚洲欧美| 国产在线视频不卡| 久久国产精品久久久久久| 亚洲奶大毛多的老太婆| 777午夜精品福利在线观看| 国产精品网站入口| 亚洲国产美女久久久久| 亚洲性日韩精品一区二区| 国产成人啪精品视频免费网| 成人在线视频网| 亚洲aⅴ男人的天堂在线观看| 国产女精品视频网站免费| 精品国产乱码久久久久久虫虫漫画|