<th id="wu2k2"><s id="wu2k2"></s></th> <blockquote id="wu2k2"></blockquote>
  • <tr id="wu2k2"></tr>
  • <samp id="wu2k2"><tbody id="wu2k2"></tbody></samp><samp id="wu2k2"><tbody id="wu2k2"></tbody></samp>
  • 更多精彩內容,歡迎關注:

    視頻號
    視頻號

    抖音
    抖音

    快手
    快手

    微博
    微博

    PHP實現JWT的Token登錄認證

    文檔

    PHP實現JWT的Token登錄認證

    這篇文章通過實例代碼介紹了PHP實現JWT的Token登錄認證的方式,session登錄認證方案:用戶從客戶端傳遞用戶名、密碼等信息,服務端認證后將信息存儲在session中,將session_id放到cookie中。
    推薦度:
    導讀這篇文章通過實例代碼介紹了PHP實現JWT的Token登錄認證的方式,session登錄認證方案:用戶從客戶端傳遞用戶名、密碼等信息,服務端認證后將信息存儲在session中,將session_id放到cookie中。
    1、JWT簡介

    JSON Web Token(縮寫 JWT),是目前最流行的跨域認證解決方案。

    session登錄認證方案:用戶從客戶端傳遞用戶名、密碼等信息,服務端認證后將信息存儲在session中,將session_id放到cookie中。

    以后訪問其他頁面,自動從cookie中取到session_id,再從session中取認證信息。

    另一類解決方案,將認證信息,返回給客戶端,存儲到客戶端。下次訪問其他頁面,需要從客戶端傳遞認證信息回服務端。

    JWT就是這類方案的代表,將認證信息保存在客戶端。

    2、JWT 的原理

    JWT 的原理是,服務器認證以后,生成一個 JSON格式的 對象,發回給客戶端,就像下面這樣。

    {
    "用戶名":?"admin",
    "角色":?"超級管理員",
    "到期時間":?"2019-07-13?00:00:00"
    }

    以后,客戶端與服務端通信的時候,都要發回這個 JSON 對象。服務器完全只靠這個對象認定用戶身份。

    為了防止用戶篡改數據,服務器在生成這個對象的時候,會加上簽名(詳見后文)。

    服務器不再保存任何 session 數據,也就是服務器變成無狀態了,從而比較容易實現擴展。

    3、JWT 的使用方式

    客戶端收到服務器返回的 JWT,可以儲存在 Cookie 里面,也可以儲存在 localStorage。

    此后,客戶端每次與服務器通信,都要帶上這個 JWT。你可以把它放在 Cookie 里面自動發送,但是這樣不能跨域,所以更好的做法是放在 HTTP 請求的頭信息Authorization字段里面。

    Authorization:?Bearer

    另一種做法是,跨域的時候,JWT 就放在 POST 請求的數據體里面。

    4、JWT 的幾個特點

    (1)JWT 默認是不加密,但也是可以加密的。生成原始 Token 以后,可以用密鑰再加密一次。

    (2)JWT 不加密的情況下,不能將秘密數據寫入 JWT。

    (3)JWT 不僅可以用于認證,也可以用于交換信息。有效使用 JWT,可以降低服務器查詢數據庫的次數。

    (4)JWT 的最大缺點是,由于服務器不保存 session 狀態,因此無法在使用過程中廢止某個 token,或者更改 token 的權限。也就是說,一旦 JWT 簽發了,在到期之前就會始終有效,除非服務器部署額外的邏輯。

    (5)JWT 本身包含了認證信息,一旦泄露,任何人都可以獲得該令牌的所有權限。為了減少盜用,JWT 的有效期應該設置得比較短。對于一些比較重要的權限,使用時應該再次對用戶進行認證。

    (6)為了減少盜用,JWT 不應該使用 HTTP 協議明碼傳輸,要使用 HTTPS 協議傳輸。

    5、功能實現

    JWT功能組件

    使用composer安裝 JWT 功能組件

    composer?require?lcobucci/jwt?3.3

    封裝JWT工具類?

    extend/tools/jwt/Token.php

    ?'http://www.pyg.com',//接收人
    ????????'id'?=>?'3f2g57a92aa',//token的唯一標識,這里只是一個簡單示例
    ????????'sign'?=>?'pinyougou',//簽名密鑰
    ????????'issuer'?=>?'http://adminapi.pyg.com',//簽發人
    ????????'expire'?=>?3600*24?//有效期
    ????];
    
    ????//生成token
    ????public?static?function?getToken($user_id){
    
    ????????//簽名對象
    ????????$signer?=?new?Sha256();
    ????????//獲取當前時間戳
    ????????$time?=?time();
    ????????//設置簽發人、接收人、唯一標識、簽發時間、立即生效、過期時間、用戶id、簽名
    ????????$token?=?(new?Builder())->issuedBy(self::$_config['issuer'])
    ????????????->canOnlyBeUsedBy(self::$_config['audience'])
    ????????????->identifiedBy(self::$_config['id'],?true)
    ????????????->issuedAt($time)
    ????????????->canOnlyBeUsedAfter($time-1)
    ????????????->expiresAt($time?+?self::$_config['expire'])
    ????????????->with('user_id',?$user_id)
    ????????????->sign($signer,?self::$_config['sign'])
    ????????????->getToken();
    ????????return?(string)$token;
    ????}
    
    ????//從請求信息中獲取token令牌
    ????public?static?function?getRequestToken()
    ????{
    ????????if?(empty($_SERVER['HTTP_AUTHORIZATION']))?{
    ????????????return?false;
    ????????}
    
    ????????$header?=?$_SERVER['HTTP_AUTHORIZATION'];
    ????????$method?=?'bearer';
    ????????//去除token中可能存在的bearer標識
    ????????return?trim(str_ireplace($method,?'',?$header));
    ????}
    
    ????//從token中獲取用戶id?(包含token的校驗)
    ????public?static?function?getUserId($token?=?null)
    ????{
    ????????$user_id?=?null;
    
    ????????$token?=?empty($token)?self::getRequestToken():$token;
    
    ????????if?(!empty($token))?{
    ????????????//為了注銷token?加以下if判斷代碼
    ????????????$delete_token?=?cache('delete_token')??:?[];
    ????????????if(in_array($token,?$delete_token)){
    ????????????????//token已被刪除(注銷)
    ????????????????return?$user_id;
    ????????????}
    ????????????$token?=?(new?Parser())->parse((string)?$token);
    ????????????//驗證token
    ????????????$data?=?new?ValidationData();
    ????????????$data->setIssuer(self::$_config['issuer']);//驗證的簽發人
    ????????????$data->setAudience(self::$_config['audience']);//驗證的接收人
    ????????????$data->setId(self::$_config['id']);//驗證token標識
    
    ????????????if?(!$token->validate($data))?{
    ????????????????//token驗證失敗
    ????????????????return?$user_id;
    ????????????}
    
    ????????????//驗證簽名
    ????????????$signer?=?new?Sha256();
    ????????????if?(!$token->verify($signer,?self::$_config['sign']))?{
    ????????????????//簽名驗證失敗
    ????????????????return?$user_id;
    ????????????}
    ????????????//從token中獲取用戶id
    ????????????$user_id?=?$token->getClaim('user_id');
    ????????}
    
    ????????return?$user_id;
    ????}
    }

    修改public/.htaccess文件,通過apache重寫,處理HTTP請求中的Authorization字段

    (不處理,php中接收不到HTTP_AUTHORAZATION字段信息)

    RewriteCond?%{HTTP:Authorization}?^(.+)$
    RewriteRule?.*?-?[E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    測試: application/adminapi/controller/Index.php中index方法

    靜態調用封裝的\tools\jwt\Token類的getToken方法,傳遞一個用戶id值,生成token

    靜態調用封裝的\tools\jwt\Token類的getUserId方法,傳遞一個token,獲取用戶id值

    訪問結果

    到此這篇關于PHP實現JWT的Token登錄認證的文章就介紹到這了,希望對大家的學習有所幫助。

    文檔

    PHP實現JWT的Token登錄認證

    這篇文章通過實例代碼介紹了PHP實現JWT的Token登錄認證的方式,session登錄認證方案:用戶從客戶端傳遞用戶名、密碼等信息,服務端認證后將信息存儲在session中,將session_id放到cookie中。
    推薦度:
    為你推薦
    資訊專欄
    熱門視頻
    相關推薦
    PHP中empty()和isset()的區別介紹 php去掉一維數組的鍵值的實例方法 php7安裝mysqli實例講解 PHP對接抖音開發平臺接口的詳細教程 PHP7中對十六進制字符串處理的問題詳解 php生成唯一uid的解決方法詳解 php兩種基本的輸出方及實例詳解 PHP遍歷數組的6種方式總結 JS截取字符串的三種方法詳解 Python常用的正則表達式處理函數詳解 一文秒懂python正則表達式常用函數 python正則表達式語法學習筆記 帶動物的詩句 如何關閉360畫報 叮咚怎么搶菜 網易云一起聽怎么添加歌 adobe creative cloud是什么軟件 24歲是什么年華 季度怎么劃分 什么是防范區 php判斷時間戳是否為今天實例講解 PHP7 preg_replace出錯及解決辦法 關于杏花的詩句 帶飛的詩句 形容女人漂亮的詩句 春花的詩句 描寫初春的詩句 描寫燕子的詩句 帶有春字的詩句 春游的詩句 形容美女的詩句 有意境的詩句 形容春天的詩句唯美 踏春的詩句 純棉白色衣服發黃了怎么可以洗白 夏天衣服背部發黃怎樣洗白 白衣服有點發黃怎么洗白 白棉麻衣服發黃洗白小竅門 白衣服發黃了怎么洗才能白 用什么方法可以把發黃衣服洗白
    Top 日韩熟女精品一区二区三区| 国产成人AV无码精品| 韩国精品一区视频在线播放| 国产大片91精品免费观看男同| 国产精品成人免费观看 | 国产精品99精品一区二区三区| 国产成人精品无码专区| 国产精品国产三级专区第1集| 午夜国产精品久久影院| 无码日韩人妻精品久久蜜桃| 国产精品无码亚洲一区二区三区 | 亚洲精品国产字幕久久不卡| 亚洲AV无码乱码麻豆精品国产| 国产精品社区在线观看| 久久精品国产亚洲AV果冻传媒| 亚洲精品无码久久久久YW| 日韩精品无码一区二区视频| 亚洲欧美日韩久久精品| 91精品视频观看| 中国国产成人精品久久| 国产精品亚洲一区二区麻豆| 最新国产午夜精品视频不卡| 国产成人亚洲精品青草天美| 国产成人精品综合| 精品国产理论在线观看不卡| 欧美日本精品一区二区三区| 久9热免费精品视频在线观看| 国产在线精品一区二区在线观看 | 精品国产柚木在线观看| 国产99视频精品免费观看7| 久久久国产精品四虎| 国自产偷精品不卡在线| 99精品视频在线观看re| 尤物国产精品福利三区| 国内精品在线播放| 国产SUV精品一区二区88| 人妻互换精品一区二区| 嫩草影院在线观看精品视频| 欧洲精品免费一区二区三区| 无码A级毛片日韩精品| 国产精品无码一本二本三本色|