依賴
創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供河池網(wǎng)站建設(shè)、河池做網(wǎng)站、河池網(wǎng)站設(shè)計(jì)、河池網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、河池企業(yè)網(wǎng)站模板建站服務(wù),10年河池做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
環(huán)境:php 5.5 以上 + OpenSSL擴(kuò)展
lcobucci/JWT
可使用composer 安裝
composer require lcobucci/jwt
也可以直接到 GitHub下載
GitHub地址: https://github.com/lcobucci/jwt
參數(shù)解釋
iss (issuer)issuer | 請求實(shí)體,可以是發(fā)起請求的用戶的信息,也可是jwt的簽發(fā)者 |
sub (Subject) | 設(shè)置主題,類似于發(fā)郵件時(shí)的主題 |
aud (audience) | 接收jwt的一方 |
exp (expire)token | 過時(shí)間期 |
nbf (not before) | 當(dāng)前時(shí)間在nbf設(shè)定時(shí)間之前,該token無法使用 |
iat (issued at)token | 創(chuàng)建時(shí)間 |
jti (JWT ID) | 對(duì)當(dāng)前token設(shè)置唯一標(biāo)示 |
實(shí)例前準(zhǔn)備
下面記錄主要的依賴引用:
define('DS', DIRECTORY_SEPARATOR); define('JWTPath', dirname(__FILE__) . DS); include_once JWTPath . 'Builder.php'; include_once JWTPath . 'Signer.php'; include_once JWTPath . 'Signer' . DS . 'Keychain.php'; include_once JWTPath . 'Signer' . DS . 'Rsa.php'; include_once JWTPath . 'Signer' . DS . 'Rsa' . DS . 'Sha256.php';
當(dāng)然它們里面還有更多的引用需要你自己加,這個(gè)在你調(diào)試時(shí)根據(jù)錯(cuò)誤提示一個(gè)個(gè)補(bǔ)就好了,這里就不多寫了。
實(shí)例
使用【lcobucci/JWT】產(chǎn)生 Token 的方式有兩種,在這里我只試驗(yàn)了第二種。
第一種:使用秘鑰簽名生成 token
use Lcobucci\JWT\Builder; use Lcobucci\JWT\Signer\Hmac\Sha256; $builder = new Builder(); $signer = new Sha256(); // 設(shè)置發(fā)行人 $builder->setIssuer('http://example.com'); // 設(shè)置接收人 $builder->setAudience('http://example.org'); // 設(shè)置id $builder->setId('4f1g23a12aa', true); // 設(shè)置生成token的時(shí)間 $builder->setIssuedAt(time()); // 設(shè)置在60秒內(nèi)該token無法使用 $builder->setNotBefore(time() + 60); // 設(shè)置過期時(shí)間 $builder->setExpiration(time() + 3600); // 給token設(shè)置一個(gè)id $builder->set('uid', 1); // 對(duì)上面的信息使用sha256算法簽名 $builder->sign($signer, '簽名key'); // 獲取生成的token $token = $builder->getToken();
驗(yàn)證 Token
use Lcobucci\JWT\Signer\Hmac\Sha256; $parse = (new Parser())->parse($token); $signer = new Sha256(); $parse->verify($signer,'簽名key');// 驗(yàn)證成功返回true 失敗false
第二種:使用RSA和ECDSA簽名
RSA和ECDSA簽名是基于公鑰和私鑰,所以必須使用私鑰生成和驗(yàn)證使用
use Lcobucci\JWT\Signer\Keychain; // 注意這里使用的sha256 use Lcobucci\JWT\Signer\Rsa\Sha256; $signer = new Sha256(); $keychain = new Keychain(); $builder = new Builder(); $builder->setIssuer('http://example.com'); $builder->setAudience('http://example.org'); $builder->setId('4f1g23a12aa', true); $builder->setIssuedAt(time()); $builder->setNotBefore(time() + 60); $builder->setExpiration(time() + 3600); $builder->set('uid', 1); // 與上面不同的是這里使用的是你的私鑰,并提供私鑰的地址 $builder->sign($signer, $keychain->getPrivateKey('file://{私鑰地址}')); $toekn = $builder->getToken();
最后還可以通過強(qiáng)制轉(zhuǎn)換的形式來拿到你想要的純字符串的 Token
$toekn = (string) $builder->getToken();
和前端的交互可以放在返回的 JSON 格式中通過參數(shù)帶過去,也可以存放在 header Authorization 中。
驗(yàn)證 Token
$signer = new \Lcobucci\JWT\Signer\Rsa\Sha256(); $keychain = new \Lcobucci\JWT\Signer\Keychain(); $parse = new \Lcobucci\JWT\Parser(); $parse->parse((string)$token); var_dump($token->verify($signer, $keychain->getPublicKey(self::$dir . '/public.key'))); ))
獲取數(shù)據(jù)
因?yàn)閿?shù)據(jù)部分可以直接獲取到,不用解密。所以在驗(yàn)證token合法后直接讀取即可,這也是不要在載體中存放敏感信息的原因。
$parse = (new Parser())->parse($token); // 獲取全部信息,返回一個(gè)數(shù)組, var_dump($parse->getClaims()); // 獲取單條信息 var_dump($parse->getClaim('aud'));
以上就是PHP使用JWT創(chuàng)建Token的實(shí)例詳解的詳細(xì)內(nèi)容,更多請關(guān)注創(chuàng)新互聯(lián)其它相關(guān)文章!
當(dāng)前題目:PHP如何用JWT創(chuàng)建Token
標(biāo)題路徑:http://www.muchs.cn/article24/pgdhce.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、靜態(tài)網(wǎng)站、電子商務(wù)、網(wǎng)站制作、微信小程序、品牌網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容