摘要:了解可以參考了解一下載拓展在官網(wǎng)中我們可以看到很多版本的,選擇一個進行下載這里我選擇的是,使用進行下載的地址這里我下載的是版本二使用使用方法可以參考下載下來的文件生成使用加密,常用加密方式有設(shè)置發(fā)行人設(shè)置接收設(shè)置設(shè)置生成的時
了解JWT可以參考:了解JWT
一:下載JWT拓展
在JWT官網(wǎng)中我們可以看到很多php版本的JWT,選擇一個JWT進行下載
這里我選擇的是lcobucci/jwt,使用composer進行下載
lcobucci/jwt的composer地址:https://packagist.org/package...
composer require lcobucci/jwt "^3.3.0" #這里我下載的是3.3.0版本
二:lcobucci/jwt使用
lcobucci/jwt使用方法可以參考下載下來的README.md文件(vendor/lcobucci/jwt/README.md)
1:生成JWT
$request = Yii::$app->getRequest(); $signer = new Sha256();//使用Sha256加密,常用加密方式有Sha256,Sha384,Sha512 $time = time(); $tokenBuilder = (new Builder()) ->issuedBy($request->getHostInfo()) // 設(shè)置發(fā)行人 ->permittedFor(isset($_SERVER["HTTP_ORIGIN"]) ? $_SERVER["HTTP_ORIGIN"] : "") // 設(shè)置接收 ->identifiedBy(Yii::$app->security->generateRandomString(10), true) // 設(shè)置id ->issuedAt($time) // 設(shè)置生成token的時間 ->canOnlyBeUsedAfter($time) // 設(shè)置token使用時間(實時使用) ->expiresAt($time + 3600); //設(shè)置token過期時間 //定義自己所需字段 $user = ["user_name" => "測試", "user_no" => "001"]; $tokenBuilder->withClaim("user", $user); $tokenBuilder->withClaim("ceshi", "測試字段"); //使用Sha256加密生成token對象,該對象的字符串形式為一個JWT字符串 $token = $tokenBuilder->getToken($signer, new Key("jwt_secret")); echo (string) $token;
2:對JWT進行校驗
在正常的開發(fā)環(huán)境下,我們將生成的JWT字符串傳到前端,當前端調(diào)用其他接口時,將我們所給的JWT傳遞到后臺,我們后臺需要對前端傳來的JWT字符串進行校驗
下面的$token為我們獲取到的前端傳遞的JWT
$token = (new Parser())->parse($token); //數(shù)據(jù)校驗 $data = new ValidationData(); // 使用當前時間來校驗數(shù)據(jù) if (!$token->validate($data)) { //數(shù)據(jù)校驗失敗 return "數(shù)據(jù)校驗失敗"; } //token校驗 $signer = new Sha256();//生成JWT時使用的加密方式 if (!$token->verify($signer, new Key("jwt_secret"))) { //token校驗失敗 return "token校驗失敗"; } echo "校驗成功";
3:獲取JWT的相關(guān)信息
$token = (new Parser())->parse($token); $token->getHeaders(); // 獲取JWT的Header(頭部)信息 $token->getClaims(); // 獲取JWT的PayLoad(負載)信息 //獲取指定參數(shù)的PayLoad(負載)信息 $token->getClaim("jti"); $token->getClaim("user");
三:編寫一個JWT類,方便對于JWT的使用
1:創(chuàng)建一個JWT類,代碼如下:
"LcobucciJWTSignerHmacSha256", "HS384" => "LcobucciJWTSignerHmacSha384", "HS512" => "LcobucciJWTSignerHmacSha512", ]; /** * 實例化JWT生成器 * @see [[LcobucciJWTBuilder::__construct()]] * @return Builder */ public function getBuilder(Encoder $encoder = null, ClaimFactory $claimFactory = null) { return new Builder($encoder, $claimFactory); } /** * 實例化JWT分析器 * @see [[LcobucciJWTParser::__construct()]] * @return Parser */ public function getParser(Decoder $decoder = null, ClaimFactory $claimFactory = null) { return new Parser($decoder, $claimFactory); } /** * 驗證JWT并返回一個令牌類 * function: ValiJwt * @return Token|null */ public function ValiJwt($token, $validate = true, $verify = true) { try { $token = $this->getParser()->parse((string)$token); } catch (RuntimeException $e) { // Yii::warning("Invalid JWT provided: " . $e->getMessage(), "jwt"); return null; } catch (InvalidArgumentException $e) { // Yii::warning("Invalid JWT provided: " . $e->getMessage(), "jwt"); return null; } if ($validate && !$this->validateToken($token)) { return null; } if ($verify && !$this->verifyToken($token)) { return null; } return $token; } /** * 數(shù)據(jù)驗證 * Validate token * @param Token $token token object * @return bool */ public function validateToken(Token $token, $currentTime = null) { $data = new ValidationData($currentTime); // @todo Add claims for validation return $token->validate($data); } /** * Validate token * @param Token $token token object * @return bool */ public function verifyToken(Token $token) { $alg = $token->getHeader("alg"); if (empty($this->supportedAlgs[$alg])) { throw new InvalidParamException("Algorithm not supported"); } $signer = Yii::createObject($this->supportedAlgs[$alg]); return $token->verify($signer, new Key("jwt_secret")); } }
2:在配置文件中添加(引入JWT類):
"components" => [ ... "jwt" => [ "class" => "appcomponentsJwt" ], ... ]
3:使用:
Yii::$app->jwt Yii::$app->jwt->getBuilder() #等同于new Builder() Yii::$app->jwt->ValiJwt($token);JWT驗證
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/31793.html
摘要:創(chuàng)建應(yīng)用有很多方法去創(chuàng)建項目,官方也推薦用在線項目創(chuàng)建工具可以方便選擇你要用的組件,命令行工具當然也可以。對于開發(fā)人員最大的好處在于可以對應(yīng)用進行自動配置。 使用JWT保護你的Spring Boot應(yīng)用 - Spring Security實戰(zhàn) 作者 freewolf 原創(chuàng)文章轉(zhuǎn)載請標明出處 關(guān)鍵詞 Spring Boot、OAuth 2.0、JWT、Spring Security、SS...
閱讀 2091·2021-11-23 10:13
閱讀 2799·2021-11-09 09:47
閱讀 2743·2021-09-22 15:08
閱讀 3323·2021-09-03 10:46
閱讀 2239·2019-08-30 15:54
閱讀 921·2019-08-28 18:09
閱讀 2433·2019-08-26 18:26
閱讀 2346·2019-08-26 13:48