使用 slim-jwt-auth 生成令牌

Generating tokens with slim-jwt-auth

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

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

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

slim-jwt-auth可以生成token吗?

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

HEADS UP! Middleware does not implement OAuth 2.0 authorization server nor does it provide ways to generate, issue or store authentication tokens. It only parses and authenticates a token when passed via header or cookie.

(重点是我的)

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


您可以检查jwt.io for a list of PHP libraries for JWT processing, but firebase/jwt would be a good starting point. If instead of generating the tokens yourself you're looking into completely delegate the authentication and issuance of tokens to a third-party, then I would suggest having a look at Auth0

披露:我在 Auth0 工作。

您可以但不需要安装额外的库来生成令牌。中间件在内部使用 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 以获取灵感。