摘要:了解可以參考了解一下載拓展在官網(wǎng)中我們可以看到很多版本的,選擇一個(gè)進(jìn)行下載這里我選擇的是,使用進(jìn)行下載的地址這里我下載的是版本二使用使用方法可以參考下載下來(lái)的文件生成使用加密,常用加密方式有設(shè)置發(fā)行人設(shè)置接收設(shè)置設(shè)置生成的時(shí)
了解JWT可以參考:了解JWT
一:下載JWT拓展
在JWT官網(wǎng)中我們可以看到很多php版本的JWT,選擇一個(gè)JWT進(jìn)行下載
這里我選擇的是lcobucci/jwt,使用composer進(jìn)行下載
lcobucci/jwt的composer地址:https://packagist.org/package...
composer require lcobucci/jwt "^3.3.0" #這里我下載的是3.3.0版本
二:lcobucci/jwt使用
lcobucci/jwt使用方法可以參考下載下來(lái)的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的時(shí)間 ->canOnlyBeUsedAfter($time) // 設(shè)置token使用時(shí)間(實(shí)時(shí)使用) ->expiresAt($time + 3600); //設(shè)置token過(guò)期時(shí)間 //定義自己所需字段 $user = ["user_name" => "測(cè)試", "user_no" => "001"]; $tokenBuilder->withClaim("user", $user); $tokenBuilder->withClaim("ceshi", "測(cè)試字段"); //使用Sha256加密生成token對(duì)象,該對(duì)象的字符串形式為一個(gè)JWT字符串 $token = $tokenBuilder->getToken($signer, new Key("jwt_secret")); echo (string) $token;
2:對(duì)JWT進(jìn)行校驗(yàn)
在正常的開(kāi)發(fā)環(huán)境下,我們將生成的JWT字符串傳到前端,當(dāng)前端調(diào)用其他接口時(shí),將我們所給的JWT傳遞到后臺(tái),我們后臺(tái)需要對(duì)前端傳來(lái)的JWT字符串進(jìn)行校驗(yàn)
下面的$token為我們獲取到的前端傳遞的JWT
$token = (new Parser())->parse($token); //數(shù)據(jù)校驗(yàn) $data = new ValidationData(); // 使用當(dāng)前時(shí)間來(lái)校驗(yàn)數(shù)據(jù) if (!$token->validate($data)) { //數(shù)據(jù)校驗(yàn)失敗 return "數(shù)據(jù)校驗(yàn)失敗"; } //token校驗(yàn) $signer = new Sha256();//生成JWT時(shí)使用的加密方式 if (!$token->verify($signer, new Key("jwt_secret"))) { //token校驗(yàn)失敗 return "token校驗(yàn)失敗"; } echo "校驗(yàn)成功";
3:獲取JWT的相關(guān)信息
$token = (new Parser())->parse($token); $token->getHeaders(); // 獲取JWT的Header(頭部)信息 $token->getClaims(); // 獲取JWT的PayLoad(負(fù)載)信息 //獲取指定參數(shù)的PayLoad(負(fù)載)信息 $token->getClaim("jti"); $token->getClaim("user");
三:編寫(xiě)一個(gè)JWT類,方便對(duì)于JWT的使用
1:創(chuàng)建一個(gè)JWT類,代碼如下:
"LcobucciJWTSignerHmacSha256", "HS384" => "LcobucciJWTSignerHmacSha384", "HS512" => "LcobucciJWTSignerHmacSha512", ]; /** * 實(shí)例化JWT生成器 * @see [[LcobucciJWTBuilder::__construct()]] * @return Builder */ public function getBuilder(Encoder $encoder = null, ClaimFactory $claimFactory = null) { return new Builder($encoder, $claimFactory); } /** * 實(shí)例化JWT分析器 * @see [[LcobucciJWTParser::__construct()]] * @return Parser */ public function getParser(Decoder $decoder = null, ClaimFactory $claimFactory = null) { return new Parser($decoder, $claimFactory); } /** * 驗(yàn)證JWT并返回一個(gè)令牌類 * 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ù)驗(yàn)證 * 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驗(yàn)證
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/31793.html
摘要:創(chuàng)建應(yīng)用有很多方法去創(chuàng)建項(xiàng)目,官方也推薦用在線項(xiàng)目創(chuàng)建工具可以方便選擇你要用的組件,命令行工具當(dāng)然也可以。對(duì)于開(kāi)發(fā)人員最大的好處在于可以對(duì)應(yīng)用進(jìn)行自動(dòng)配置。 使用JWT保護(hù)你的Spring Boot應(yīng)用 - Spring Security實(shí)戰(zhàn) 作者 freewolf 原創(chuàng)文章轉(zhuǎn)載請(qǐng)標(biāo)明出處 關(guān)鍵詞 Spring Boot、OAuth 2.0、JWT、Spring Security、SS...
摘要:是目前最流行的跨域身份驗(yàn)證解決方案。由于是對(duì)稱加密算法,所以可以輕松解密因此我們?cè)谪?fù)載部分不要將私密信息放置在里面,只需要把能驗(yàn)證唯一的標(biāo)識(shí)信息添加就可以了。加密算法,必須設(shè)置為一個(gè),或。驗(yàn)證標(biāo)頭同時(shí)也驗(yàn)證,一般不用本文參考 JWT(Json Web Token):是目前最流行的跨域身份驗(yàn)證解決方案。此前我們使用的身份驗(yàn)證方式都是基于Session:showImg(https://se...
摘要:是目前最流行的跨域身份驗(yàn)證解決方案。由于是對(duì)稱加密算法,所以可以輕松解密因此我們?cè)谪?fù)載部分不要將私密信息放置在里面,只需要把能驗(yàn)證唯一的標(biāo)識(shí)信息添加就可以了。加密算法,必須設(shè)置為一個(gè),或。驗(yàn)證標(biāo)頭同時(shí)也驗(yàn)證,一般不用本文參考 JWT(Json Web Token):是目前最流行的跨域身份驗(yàn)證解決方案。此前我們使用的身份驗(yàn)證方式都是基于Session:showImg(https://se...
摘要:是目前最流行的跨域身份驗(yàn)證解決方案。由于是對(duì)稱加密算法,所以可以輕松解密因此我們?cè)谪?fù)載部分不要將私密信息放置在里面,只需要把能驗(yàn)證唯一的標(biāo)識(shí)信息添加就可以了。加密算法,必須設(shè)置為一個(gè),或。驗(yàn)證標(biāo)頭同時(shí)也驗(yàn)證,一般不用本文參考 JWT(Json Web Token):是目前最流行的跨域身份驗(yàn)證解決方案。此前我們使用的身份驗(yàn)證方式都是基于Session:showImg(https://se...
閱讀 2078·2021-11-23 10:13
閱讀 2788·2021-11-09 09:47
閱讀 2737·2021-09-22 15:08
閱讀 3312·2021-09-03 10:46
閱讀 2230·2019-08-30 15:54
閱讀 909·2019-08-28 18:09
閱讀 2429·2019-08-26 18:26
閱讀 2341·2019-08-26 13:48