• <table id="cjgd4"><strike id="cjgd4"></strike></table>
    <acronym id="cjgd4"><strong id="cjgd4"><address id="cjgd4"></address></strong></acronym><p id="cjgd4"><strong id="cjgd4"><small id="cjgd4"></small></strong></p>
    <acronym id="cjgd4"></acronym><table id="cjgd4"><strike id="cjgd4"></strike></table><td id="cjgd4"></td><acronym id="cjgd4"></acronym><acronym id="cjgd4"></acronym>

            溫馨提示×

            溫馨提示×

            您好,登錄后才能下訂單哦!

            密碼登錄×
            登錄注冊×
            其他方式登錄
            點擊 登錄注冊 即表示同意《億速云用戶服務條款》

            php中關于token驗證的問題解決

            發布時間:2023-09-05 11:41:23 來源:億速云 閱讀:76 作者:栢白 欄目:開發技術

            今天小編給大家分享的是php中關于token驗證的問題解決,相信很多人都不太了解,為了讓大家更加了解,所以給大家總結了以下內容,一起往下看吧。一定會有所收獲的哦。

            token驗證

            什么是token?我相信很多開發者都或多或少聽過基于 token 的用戶鑒權和基于 session 的用戶鑒權,而今天說的 token 驗證就是第一種了。token 的意思是“令牌”,是用戶第一次登錄服務器返回的,它能讓用戶不需要提交賬戶和密碼就能進行服務器驗證身份,它是被放在請求頭中一起提交給服務器的。

            為什么用 token 驗證?怎么用 token 驗證?現在簡單介紹一下,有錯誤請大牛指出,我會立即更正!

            首先是為什么用?

            為了驗證用戶的登錄情況,畢竟不是登錄狀態的話很多東西是不允許訪問和呈現出來的。 減少數據庫的頻繁查詢,增加服務器性能,使得服務器更加健壯。 它可以在多個服務間共享,完全由應用管理,可以避開瀏覽器的同源策略。 增加擴展性、安全性和減少服務器內存開銷。傳統的服務器驗證是使用 cookie + session 驗證,服務器需要每一次都驗證客戶端的請求去辨別客戶端身份,并且還要創建一個記錄將用戶信息存儲起來,然而隨著現在科技發達,這種驗證弊端也就顯露出來了,例如用戶增多從而引發內存資源消耗變大、CORS(跨域資源共享)和 CSRF(跨域請求偽造)等。

            那么怎么用呢?

            流程: 客戶端的用戶輸入賬戶密碼請求登錄。 服務端收到請求并進行驗證,成功則生成一個 token 值并返回給客戶端。 客戶端收到 token 值并將其存儲,例如 本地存儲:localStore 或 放在Cookie。 客戶端每次請求都將 token 值放在請求頭中發給服務器,服務器進行驗證有效性。 成功則返回客戶端請求的數據,失敗可以讓用戶進行登錄重新獲取新的 token 值。

            token的組成

            一般 token 組成:

            Uid(用戶身份的唯一標識) time(時間戳) sign(簽名)

            JWT 組成:

            JWT(JSON Web Tokens) 讀:jot

            標準的組成:

            header(頭部),參數主要包括:類型--JWT,簽名的算法--HS256。

            private static $header=array(
                    'alg'=>'HS256', //生成signature的算法
                    'typ'=>'JWT'    //類型
            );

            poyload(負荷):一般是自己想要放置的數據(因為信息會暴露,不建議放敏感信息)。


            php中關于token驗證的問題解決

            $time = time();
            $tokenInfo = [
                'iss'=>'CIMS',
                'iat'=>$time,
                'nbf'=>$time+2,
                'jti'=>md5(uniqid('JWT').$time),
                'sub'=>$data,
                'exp'=> $time+7200
            ];

            sign(簽名):為了防止被惡意篡改數據。

            /**
            * HMACSHA256簽名 https://jwt.io/ 中HMACSHA256簽名實現
            * @param string $input 為base64編碼后連接而成的的header和poyload的字符串:base64UrlEncode(header).".".base64UrlEncode(tokenInfo)
            * @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));
            }

            結果:一般會使用 base64 編碼,中間用.隔開

            eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1aWQiOjEsIm5hbWUiOiJjZXNoaSIsImF1ZCI6IiIsImV4cCI6MTY4MTIyNDY0OCwiaWF0IjoxNjgxMjIxMDQ4LCJpc3MiOiIiLCJqdGkiOiJkN2UxYTBiNGU3MDZmODUxMjgzZWZkZWVlZjQ5MWEwOSIsIm5iZiI6MTY4MTIyMTA0OCwic3ViIjoiIn0.qRTyO1pYHHJxBNRwHUz032NWKKqS3C9dakOHASJyASk

            總結

            擴展

            放請求頭:php中關于token驗證的問題解決

            JWT 缺點:1.簽發生成后無法修改。2.不包含權限控制。

            解決token 注銷問題:盡快讓 token 失效,退出登錄后刪除 cookie,對失效的 token 形成黑名單,會違無狀態特性,但是標記時間短,會減少服務器壓力。

            解決token 續簽問題:后端在用戶登錄的接口添加 token 有效期判斷:例如即將過期那就重新生成一個返回。

            token驗證目前是非常流行的,不僅僅只是在web網站上,移動端、小程序也會用到。例如小程序用的是使用 login 獲取 code 發送給后端進行一系列使用微信官方API接口獲取數據再進行加密等操作才返回 token,這里就不詳細展開了吧,有興趣哈哈哈哈自己查下看看啦。

            關于php中關于token驗證的問題解決就分享到這里了,希望以上內容可以對大家有一定的參考價值,可以學以致用。如果喜歡本篇文章,不妨把它分享出去讓更多的人看到。

            向AI問一下細節

            免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

            AI

            国产片婬乱一级毛片视频|女同另类专区久久精品|色综合久久综合|欧美日韩在线旡码视频一区
          1. <table id="cjgd4"><strike id="cjgd4"></strike></table>
            <acronym id="cjgd4"><strong id="cjgd4"><address id="cjgd4"></address></strong></acronym><p id="cjgd4"><strong id="cjgd4"><small id="cjgd4"></small></strong></p>
            <acronym id="cjgd4"></acronym><table id="cjgd4"><strike id="cjgd4"></strike></table><td id="cjgd4"></td><acronym id="cjgd4"></acronym><acronym id="cjgd4"></acronym>