dbstudios / veritas
处理JSON Web Token认证的库
Requires
- php: >=5.6
Requires (Dev)
- phpunit/phpunit: 6.0.*
- ramsey/uuid: 3.5.*
Suggests
- ramsey/uuid: If you plan on using any of the UUID identifiers
README
$ composer require dbstudios/veritas
设置
要使用Veritas,你需要三样东西
0. 一个签名者,用于对令牌的有效负载进行签名 0. 一个密钥,用于对令牌进行签名和验证 0. 一个生存时间值(以秒为单位),用于您的令牌
签名者
Veritas包含几个签名者,并且创建自己的签名者非常简单。Veritas附带以下签名者,它们都应该相对容易理解。
DaybreakStudios\Veritas\Signers\HashHMACSigner
DaybreakStudios\Veritas\Signers\Sha256HashHMACSigner
DaybreakStudios\Veritas\Signers\Sha512HashHMACSigner
第一个,HashHMACSigner
,使用PHP的hash_hmac
函数来生成签名。所使用的哈希函数取决于你如何调用它的构造函数。
$signer = new HashHMACSigner('HS256', 'sha256');
第一个参数是所使用算法的名称,必须与RFC 7158中定义的算法名称相对应。第二个参数是用于hash_hmac
的哈希算法的名称。
Sha256和Sha512签名者(列表中的最后两项),都扩展自HashHMACSigner
,并且会为你调用它的构造函数,这意味着你可以这样使用它们。
$signer = new Sha256HashHMACSigner();
不需要构造函数参数,因为每个类已经知道算法的RFC名称,以及传递给hash_hmac
的参数。
密钥
密钥是一个用于签名令牌的字符串。必须提供一个。请确保将您的密钥存储在安全的地方,并且永远不要将其提交到git!
生存时间
生存时间(简称TTL)是令牌有效的秒数。当调用Veritas::parse()
时,如果令牌的过期日期已过,则总是会拒绝令牌。
用法
您会发现自己在使用Veritas
类的主要方法中有三种:issue
、parse
和refresh
。
颁发令牌
您可以通过调用issue
创建新令牌。该方法最多可接受三个参数:包含在令牌中的额外声明、令牌的主题和生存时间值。下面的示例使用所有三个,但每个都是可选的。
$veritas->issue([
'my_custom_claim' => 'Hello, world!',
], 'tyler@lartonoix.com', 1600);
该示例将生成一个新的令牌,包含名为“my_custom_claim”的额外声明,主题为“tyler@lartonoix.com”,TTL为1600秒,即半小时。
刷新令牌
可以在令牌过期之前随时刷新令牌。您可以通过调用refresh
方法来这样做。
$token = $_SERVER['HTTP_AUTHORIZATION'];
$veritas->refresh($token);
如果选择,refresh
还可以接受两个可选参数:要添加到新令牌中的额外声明和自定义TTL值。
解析令牌
parse
方法允许您读取令牌并验证它是否有效。
$token = $_SERVER['HTTP_AUTHORIZATION'];
try {
$parsed = $veritas->parse($token);
} catch (BadTokenException $ex) {
printf('Could not parse token: %s', $ex->getMessage());
}
如果令牌有问题,parse
方法将抛出三种异常之一。
异常 | 原因 |
---|---|
TokenExpiredException | 令牌已过有效期 |
TokenInvalidException | 无法解析令牌,或者令牌的签名与预期签名不匹配 |
TokenNotYetValidException | 令牌尚未通过“不在之前”日期 |
这三种异常都扩展自BadTokenException
,因此如果您不需要单独处理每种情况,您可以直接捕获该异常。
自定义签名者
请参考SignerInterface了解您的签名者需要实现哪些方法,以及HashHMACSigner的示例实现。