webdevcave / jwt
使用PHP生成JSON Web Tokens的库
v1.1.1
2024-07-16 00:18 UTC
Requires
- php: >=8.1
- ext-json: *
- ext-openssl: *
- ralouphie/getallheaders: ^3.0
Requires (Dev)
- phpunit/phpunit: ^10.5
- rregeer/phpunit-coverage-check: ^0.3.1
This package is auto-updated.
Last update: 2024-09-16 00:44:57 UTC
README
如何安装
composer require webdevcave/jwt
提供的签名者
提供的声明验证器
- "typ" 声明默认定义为JWT。
- "iat" 和 "nbf" 声明默认从当前时间戳开始。
- "jti" 验证器未提供,但可以在“验证您的私有声明”部分中实现。
基本用法
生成一个令牌
<?php use Webdevcave\Jwt\Token; use Webdevcave\Jwt\SignerFactory; use \Webdevcave\Jwt\Secrets\HsSecret; $secret = new HsSecret('your_secret_here'); $token = Token::create() ->withSigner(SignerFactory::build('HS256')) //HS256 signer is provided by default. This could be omitted ->with('exp', strtotime('+ 1 hour')) //Expires in one hour ->sign($secret) ->toString();
验证并读取令牌中的值
<?php use Webdevcave\Jwt\Token; $token = Token::fromString('xxxx.yyyyy.zzzzz'); $isValid = $token->validate($secret); if ($isValid) { $payload = $token->getPayload(); $headers = $token->getHeaders(); }
RSA令牌
首先,您需要一个公钥/私钥对。如果您没有,您可以在以下页面轻松生成: https://cryptotools.net/rsagen
有了您的公钥/私钥对,过程将与上述示例中的hmac令牌类似
<?php use Webdevcave\Jwt\Token; use Webdevcave\Jwt\SignerFactory; use \Webdevcave\Jwt\Secrets\RsSecret; $secret = new RsSecret('private_key', 'public_key'); //Generate a token string $tokenString = Token::create() ->withSigner(SignerFactory::build('RS256')) ->with('exp', strtotime('+ 1 hour')) //Expires in one hour ->sign($secret) ->toString(); //Validating... $token = Token::fromString($tokenString); if ($token->validate($secret)) { //token is valid... $creationDate = date(DATE_RFC3339, $token->getPayload('iat')); $expirationDate = date(DATE_RFC3339, $token->getPayload('exp')); echo "Your token was created at $creationDate."; echo "It will expire at $expirationDate."; }
验证您的私有声明
首先,您必须创建您的验证器
use \Webdevcave\Jwt\Validator\Validator; class MyClaimValidator extends Validator { /** * @return string */ public function validates() : string { return 'my-claim'; //this will validate value inside 'my-claim', when set } /** * @param mixed $value * @return bool */ public function validate(mixed $value) : bool { // this claim must contain value 'a', 'b' or 'c' $valid = in_array($value, ['a', 'b', 'c']); return $valid; } }
然后,您只需在运行validate()方法之前分配您的验证器即可
<?php use Webdevcave\Jwt\Token; $token = Token::fromString('xxxx.yyyyy.zzzzz') ->assignValidator(new MyClaimValidator()); $isValid = $token->validate($mySecret); if ($isValid) { $myClaim = $token->getPayload('my-claim'); }
快捷方式
您可以使用以下方法直接从Authorization头或通过查询参数获取Token实例
use Webdevcave\Jwt\Token; //Load from authorization bearer $token1 = Token::fromAuthorizationBearer(); //Load from get parameters $token2 = Token::fromQueryString('token'); $token3 = Token::fromQueryString('token2');
贡献
欢迎贡献!如果您发现任何问题或对改进有建议,请在GitHub上打开一个问题或拉取请求。
许可证
本项目使用MIT许可证 - 有关详细信息,请参阅LICENSE文件。
致谢
原始项目可以在此处找到