hershel-theodore-layton / simple-web-token
Simple Web Token 规范的实现。
Requires
- hhvm: ^4.102
Requires (Dev)
- facebook/fbexpect: ^2.8
- hhvm/hacktest: ^2.3
- hhvm/hhast: ^4.102
- hhvm/hhvm-autoload: ^3.2
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 规范由以下作者编写:
- Dick Hardt (dick.hardt@microsoft.com), 编辑
- Yaron Goland (yarong@microsoft.com)
Hack 中 SHA-256 的实现主要基于 amosnier 的 C 实现。此 Hack 实现可在此找到 这里。C 代码的实现可在此找到 这里。C 代码根据您的选择受 The Unlicense
或 BSD-0-Clause
许可。两种许可证都是公共领域等效许可证,不需要归属。感谢 Amosnier,将其移植过来是一种愉快的体验。
我相信我已经满足了第三方许可证强加给我的要求。如果您在此 Github 命名空间下发现任何第三方许可证的违规行为,您可以通过在受影响的项目上提交 Github Issue 来通知我。