4

我正在使用 Slim 框架将 JSON 返回到我的 Android 设备。我目前正在我的设备上登录。我使用 3 种不同的登录方式:Facebook、Google 和帐户登录。当他进行帐户登录时,他可以注册一个新帐户或使用现有帐户登录。

为了我的 Web 服务的安全性,我想使用 JWT 安全性。因此,我正在阅读和观看有关其工作原理的视频。我想我理解它是如何工作的,但我找不到任何关于如何正确实现它的信息。

我用于 slim v3 的中间件称为:Slim-JWT-Auth。我在我的苗条框架中找到了以下链接来实现它,我认为它可以正常工作。

现在我的问题:

  1. 如何生成我的令牌?
  2. 我什么时候生成我的令牌?
  3. 使用 Google 或 Facebook 登录时是否还需要令牌?因为他们已经使用了 Auth2.0 令牌?

我了解它是如何工作的,但没有人谈论何时以及如何实现它。那么我什么时候需要生成令牌(在登录网络服务时?),我是否需要在每次启动应用程序后生成一个令牌,还是只需要等到令牌过期?

4

1 回答 1

4

如何生成我的令牌?

由于中间件已经包含firebase/php-jwt库,您可以使用它来生成令牌。

$now = new DateTime();
$future = new DateTime("now +2 hours");
$server = $request->getServerParams();
$payload = [
    "iat" => $now->getTimeStamp(),
    "exp" => $future->getTimeStamp(),
    "sub" => $server["PHP_AUTH_USER"]
];

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

我什么时候生成我的令牌?

例如,在您的 api 中,您可以包含一个受密码保护的路由,该路由返回令牌。/token除了经过 JWT 身份验证之外的所有其他路由。客户端可以在每个请求中请求令牌,或者在旧请求过期之前总是位。

$app->add(new \Slim\Middleware\HttpBasicAuthentication([
    "path" => "/token",
    "users" => [
        "test" => "test"
    ]
]);

$app->add(new \Slim\Middleware\JwtAuthentication([
    "secret" => "supersecretkeyyoushouldnotcommittogithub"
    "rules" => [
        new RequestPathRule([
            "path" => "/",
            "passthrough" => ["/token"]
        ])
    ]
]);

$app->post("/token", function ($request, $response, $arguments) {

    $now = new DateTime();
    $future = new DateTime("now +2 hours");
    $server = $request->getServerParams();

    $payload = [
        "iat" => $now->getTimeStamp(),
        "exp" => $future->getTimeStamp(),
        "sub" => $server["PHP_AUTH_USER"],
    ];
    $secret = "supersecretkeyyoushouldnotcommittogithub";
    $token = JWT::encode($payload, $secret, "HS256");
    $data["status"] = "ok";
    $data["token"] = $token;

    return $response->withStatus(201)
        ->withHeader("Content-Type", "application/json")
        ->write(json_encode($data, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT));
});

使用 Google 或 Facebook 登录时是否还需要令牌?因为他们已经使用了 Auth2.0 令牌?

对此没有明确的答案。这取决于”。例如,您可以使用 Facebook 或 Google 验证您的/token路由并从那里返回您自己的 JWT 令牌。

您可能想要检查以上所有内容的更详细示例实现正在进行中。

于 2016-03-05T09:34:45.887 回答