使用 slim-jwt-auth 生成令牌

Posted

技术标签:

【中文标题】使用 slim-jwt-auth 生成令牌【英文标题】:Generating tokens with slim-jwt-auth 【发布时间】:2017-04-06 07:57:54 【问题描述】:

我正在使用 slim-jwt-auth 为 JSON API 创建基于令牌的身份验证。

文档非常有帮助,但我不明白的一件事是令牌是如何生成的?文档说中间件能够解码令牌,但看不到任何编码方式。

我见过的一些项目使用firebase/jwt,但我不确定这是否需要,或者是否与slim-jwt-auth 兼容。

slim-jwt-auth 可以生成令牌吗?

【问题讨论】:

【参考方案1】:

您可以但不需要安装额外的库来生成令牌。中间件在内部使用firebase/php-jwt,因此您可以使用相同的库来生成令牌。类似于以下内容。

use \Firebase\JWT\JWT;
use \Tuupola\Base62;

$now = new DateTime();
$future = new DateTime("now +2 hours");
$jti = Base62::encode(random_bytes(16));

$secret = "your_secret_key";

$payload = [
    "jti" => $jti,
    "iat" => $now->getTimeStamp(),
    "nbf" => $future->getTimeStamp()
];

$token = JWT::encode($payload, $secret, "HS256");

您也可以查看Slim API Skeleton 以获得灵感。

【讨论】:

【参考方案2】:

根据slim-jwt-auth 登陆页面上的免责声明,中间件仅处理令牌;没有提供任何生成它们的方法。

注意!中间件不实现 OAuth 2.0 授权服务器也不提供生成、发布或存储身份验证令牌的方法。它仅在通过标头或 cookie 传递时解析和验证令牌。

(重点是我的)

您确实可以使用另一个库来生成 JWT 令牌,然后 slim-jwt-auth 将使用这些令牌。只要两个库都正确实现了规范,至少如果您只使用强制实现规范的部分内容,那么您应该没有互操作性问题。


您可以查看 jwt.io 以获取用于 JWT 处理的 PHP 库列表,但 firebase/jwt 将是一个很好的起点。如果您不是自己生成令牌,而是将令牌的身份验证和颁发完全委托给第三方,那么我建议您查看Auth0。

披露:我在 Auth0 工作。

【讨论】:

以上是关于使用 slim-jwt-auth 生成令牌的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 JWT 刷新令牌生成新的访问令牌

firebase 使用啥来生成注册令牌?

使用 Powershell 脚本生成 Azure Databricks 令牌

Laravel 护照授权令牌在生成新令牌时过期

无法使用 smalrye jwt 生成令牌

无法使用跨不同机器生成的访问令牌进行身份验证