dbstudios/veritas

处理JSON Web Token认证的库

0.5.0 2018-07-13 18:36 UTC

This package is auto-updated.

Last update: 2024-09-14 08:05:23 UTC


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类的主要方法中有三种:issueparserefresh

颁发令牌

您可以通过调用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的示例实现。