'Lcobucci\JWT\Signer\Hmac\Sha256', 'HS384' => 'Lcobucci\JWT\Signer\Hmac\Sha384', 'HS512' => 'Lcobucci\JWT\Signer\Hmac\Sha512', ]; /** * 创建JWT生成器 * @param Encoder|null $encoder * @param ClaimFactory|null $claimFactory * @return Builder */ public function getBuilder(Encoder $encoder = null, ClaimFactory $claimFactory = null) { return new Builder($encoder, $claimFactory); } /** * 创建JWT解析器 * @param Decoder|null $decoder * @param ClaimFactory|null $claimFactory * @return Parser */ public function getParser(Decoder $decoder = null, ClaimFactory $claimFactory = null) { return new Parser($decoder, $claimFactory); } /** * 验证JWT,并返回一个令牌类 * @param $token * @param bool $validate * @param bool $verify * @return Token|null */ public function validateJwt($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; } /** * 数据验证 * @param Token $token * @param null $currentTime * @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 * @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')); } }