hershel-theodore-layton/simple-web-token

Simple Web Token 规范的实现。

v0.0.0 2024-06-23 12:32 UTC

This package is auto-updated.

Last update: 2024-09-26 18:12:09 UTC


README

Simple Web Token 规范的实现。

用法

// This example assumes you have some `$your_key_store`,
// which maps key names to keys.

$serialized = SimpleWebToken\sign(
  vec[
    tuple('com.example.user_id', '4'),
    tuple(SimpleWebToken\Token::EXPIRES_ON, (string)(\time() + 300)),
    tuple('com.example.secret_key_used', '#1')
  ],
  SimpleWebToken\this_is_the_secret_key($your_key_store->load('#1')),
);

$token = SimpleWebToken\parse($serialized);

$key = $your_key_store->loadKey(
  $token->getUniqueKeys() |> idx($$, 'com.example.secret_key_used', 'default')
);

$state = $token->validate($key, \time());

switch ($state) {
  case SimpleWebToken\Validity::VALID:
  case SimpleWebToken\Validity::EXPIRED:
  case SimpleWebToken\Validity::INVALID:
}

// Or the shorthand
$token->isOkay($key, \time()); // This returns `true` for `::VALID` only.

性能与纯粹性

在 hhvm 版本 4.172 及以下版本中,本地函数 \hash()\hash_hmac() 不是纯粹的(这是目前发布的最新版本)。\hash() 已在 2023 年 10 月变得纯粹。此存储库包括 SimpleWebToken\sha256_pure() 作为 \hash() 的替代品,它是纯粹的。

在 repo auth 模式下运行时,jit 将启动并使此 polyfill 的性能约为本地 \hash() 函数的 20%。在 jit 优化之前,性能差距更大,尤其是在不运行 repo auth 模式的情况下。如果您网站流量非常高且 CPU 周期稀缺,您肯定会感受到未优化字节码在字节间移动的影响。您可以选择使用 SimpleWebToken\sha256_native() 来恢复所有性能,但代价是要求 [defaults]

如果您正在运行 2023 年 10 月或之后的 hhvm@next 的构建,可以从 此处提交。您可以通过传递一个带有纯粹上下文的本地包装器。

许可证

此代码根据 MIT 许可证 许可,但请注意,此代码实现了 Simple Web Token 规范。

Simple Web Token 规范版本 0.9.5.1,可在 此处 找到,根据 开放 Web 基金会协议版本 0.9 许可。此许可证是宽容的,只要您不对规范实现者采取非防御性专利法律行动。这也适用于此实现(和实现者)。

致谢

Simple Web Token 规范由以下作者编写:

Hack 中 SHA-256 的实现主要基于 amosnier 的 C 实现。此 Hack 实现可在此找到 这里。C 代码的实现可在此找到 这里。C 代码根据您的选择受 The UnlicenseBSD-0-Clause 许可。两种许可证都是公共领域等效许可证,不需要归属。感谢 Amosnier,将其移植过来是一种愉快的体验。

我相信我已经满足了第三方许可证强加给我的要求。如果您在此 Github 命名空间下发现任何第三方许可证的违规行为,您可以通过在受影响的项目上提交 Github Issue 来通知我。