如何在纯 PHP 中创建刷新令牌?

Mik*_*son 2 php refresh token jwt

我一直在网上搜索有关如何自己生成刷新令牌的示例/说明。不使用 Oauth 等任何服务。只是用普通的 php 语言。我找到了很多关于如何使用它们的信息,但没有找到如何创建它们。

我创建一个像这样的 JWT:

$secret = "secret";

$header = json_encode(['typ' => 'JWT', 'alg' => 'HS256']);

function createJWT($user_id){
    $date = new DateTime();
    $timestamp = $date->getTimestamp();

    global $header;
    global $secret;
    $payload = ['user_id' => $user_id, 'iat'=> $timestamp, 'exp'=>$timestamp+10];
    $payload = json_encode( $payload );
    $base64UrlHeader = str_replace(['+','/','='], ['-','_',''], base64_encode($header));
    $base64UrlPayload = str_replace(['+','/','='], ['-','_',''], base64_encode($payload));
    $signature = hash_hmac('sha256', $base64UrlHeader . "." . $base64UrlPayload, $secret);
    $base64UrlSignature = str_replace(['+','/','='], ['-','_',''], base64_encode($signature));
    $JWT =$base64UrlHeader . '.' . $base64UrlPayload . '.' . $base64UrlSignature;

    return $JWT;
}
Run Code Online (Sandbox Code Playgroud)

当查看 jwt.io 调试器时,它工作正常。

但由于我想使用刷新令牌,这样我就可以在它们过期后“创建”更多访问令牌,因此我找不到任何有关如何创建此类令牌的信息。

据我了解,访问令牌存储在本地存储/cookie 中,而刷新令牌存储在数据库中。

如何创建刷新令牌,它包含哪些信息?我想这不仅仅是一个随机字符串。存储刷新令牌的数据库/表的模式 a 是什么样的?

Mik*_*son 5

我查看了 JWT 的文档,似乎你只需要创建一个 uuid、guid ,它只是一个几乎不可能被破解的唯一值/字符串。

我获取了该 uuid 并将其作为“刷新令牌”存储在本地存储中。我还存储在数据库中,其中包含一个表:ID | 用户 ID | 刷新令牌 | 因此,每当 JWT 过期时,我都会使用持久刷新令牌并检查该刷新令牌是否存在于数据库中以及是否未过期。然后我发回了一个新的 JWT 以及一个新的刷新令牌。

  • 举例说明您的想法怎么样? (7认同)