yymou / easyjwt
JSON Web Token implementation for PHP.
v1.0.5
2022-12-22 11:28 UTC
Requires
- php: ^7.2
- nowakowskir/php-jwt: ^2.0
Requires (Dev)
- phpunit/phpunit: ^7.5|^8.0
README
##如果你想要快速上手并将jwt运用到项目中,就来试试EasyJwt吧!
它尽可能的简化使用jwt的一些前期工作,composer拉过来两三行代码即用, 你甚至不用去管理秘钥...
此处阅读jwt的相关信息:
安装
composer require yymou/easyjwt
完毕后引入到项目
require 'vendor/autoload.php';
之后就可以愉快的使用啦
示例
- 生成token
需要提供 payload 数据, 项目中一般情况这个值存储登录用户数据 如:$payload = ["uid" => 123];
$token = (new EasyJwt\Jwt())->setPayload($payload)->getToken();
- 验证token
(new EasyJwt\Jwt())->explainToken($token)->getPayload();
搞定
如果你想个性化一下参数的话 可以往下看...
以下 EasyJwt\Jwt() 均写为 $jwtObj;
-
你可以定义加密的算法
- 支持的算法如下:
- HS256
- HS384
- HS512
- RS256
- RS384
- RS512
- 示例 (两种方式, 以"HS256"为例)
1.
$token = $jwtObj->setAlgorithm("HS256")->setPayload($payload)->getToken();
$token = (new EasyJwt\Jwt("HS256"))->setPayload($payload)->getToken();
- 支持的算法如下:
-
你可以自定义加密秘钥
- 根据加密算法不同 需要秘钥的类型也不同 openssl需要私钥公钥, hmac只需要一个秘钥即可
- 示例
$token = $jwtObj->setKey("你的私钥")->setPayload($payload)->getToken();
如果不定义自己的秘钥, easyJwt会帮你自动生成秘钥文件, 路径存放在: {你的项目路径}/vendor/yymou/easyjwt/src/secret/ 下, 结构如下:
- vendor
- yymou
- easyJwt
- secret
- hmac.key -- hmac算法使用秘钥
- openssl-private.key -- openssl算法使用私钥
- openssl-public.key -- openssl算法使用公钥
- secret
- easyJwt
- yymou
需要的话可以自行查阅, 注意各环境的秘钥不要污染!
-
你可以自定义token过期时间
- 默认的过期时间是86400s
- 示例
$token = $jwtObj->setExp(86400*7)->setPayload($payload)->getToken();
解析token
$jwtObj->explainToken($token)->getPayload();
- explainToken()后支持的方法
- getPayload() -- 获取payload实体
- getKey() -- 获取当前加密秘钥
- getHeader() -- 获取header
实例代码 (仅供参考) php 7.2+
<?php namespace App\Business\Service; use EasyJwt\Jwt; /** * 通行相关逻辑 */ class AccessService extends BaseService { public $errorMsg = ''; private $jwtModel; const JWT_EXPIRE_TIME = 86400 * 15; function __construct() { parent::__construct(); $this->jwtModel = new Jwt(); } /** * 验证bearer token * @return bool|array */ public function verifyBearerToken() { $token = $this->getBearerToken(); if (empty($token)) { return false; } return $this->jwtModel->explainToken($token)->getPayload(); } /** * Get header Authorization * */ public function getAuthorizationHeader() { $headers = null; if (isset($_SERVER['Authorization'])) { $headers = trim($_SERVER["Authorization"]); } else if (isset($_SERVER['HTTP_AUTHORIZATION'])) { $headers = trim($_SERVER["HTTP_AUTHORIZATION"]); } elseif (function_exists('apache_request_headers')) { $requestHeaders = apache_request_headers(); $requestHeaders = array_combine(array_map('ucwords', array_keys($requestHeaders)), array_values($requestHeaders)); if (isset($requestHeaders['Authorization'])) { $headers = trim($requestHeaders['Authorization']); } } return $headers; } /** * get access token from header * */ public function getBearerToken() { $headers = $this->getAuthorizationHeader(); if (!empty($headers)) { if (preg_match('/Bearer\s(\S+)/', $headers, $matches)) { return $matches[1]; } } return null; } //刷新token public function refreshToken(array $payload) : string { if (!empty($payload)) { return $this->jwtModel->setExp(self::JWT_EXPIRE_TIME)->setPayload($payload)->getToken(); } return ''; } }