成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Yii 使用JWT

RyanHoo / 3483人閱讀

摘要:了解可以參考了解一下載拓展在官網(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

相關(guān)文章

  • 使用JWT保護你的Spring Boot應(yīng)用 - Spring Security實戰(zhàn)

    摘要:創(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...

    wemall 評論0 收藏0
  • JWT驗證

    摘要:是目前最流行的跨域身份驗證解決方案。由于是對稱加密算法,所以可以輕松解密因此我們在負載部分不要將私密信息放置在里面,只需要把能驗證唯一的標識信息添加就可以了。加密算法,必須設(shè)置為一個,或。驗證標頭同時也驗證,一般不用本文參考 JWT(Json Web Token):是目前最流行的跨域身份驗證解決方案。此前我們使用的身份驗證方式都是基于Session:showImg(https://se...

    honhon 評論0 收藏0
  • JWT驗證

    摘要:是目前最流行的跨域身份驗證解決方案。由于是對稱加密算法,所以可以輕松解密因此我們在負載部分不要將私密信息放置在里面,只需要把能驗證唯一的標識信息添加就可以了。加密算法,必須設(shè)置為一個,或。驗證標頭同時也驗證,一般不用本文參考 JWT(Json Web Token):是目前最流行的跨域身份驗證解決方案。此前我們使用的身份驗證方式都是基于Session:showImg(https://se...

    894974231 評論0 收藏0
  • JWT驗證

    摘要:是目前最流行的跨域身份驗證解決方案。由于是對稱加密算法,所以可以輕松解密因此我們在負載部分不要將私密信息放置在里面,只需要把能驗證唯一的標識信息添加就可以了。加密算法,必須設(shè)置為一個,或。驗證標頭同時也驗證,一般不用本文參考 JWT(Json Web Token):是目前最流行的跨域身份驗證解決方案。此前我們使用的身份驗證方式都是基于Session:showImg(https://se...

    cfanr 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<