トークンを生成するにはどうすればよいですか?
ミドルウェアには既に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 トークンを使用しているためですか?
これに対する明確な答えはありません。場合によります"。たとえば/token
、Facebook または Google でルートを認証し、そこから独自の JWT トークンを返すことができます。
上記のすべての詳細な実装例が進行中であり、確認する必要があります。