如何在普通 php 中创建刷新令牌?
How to create a refresh token in plain php?
我一直在网上搜索 example/explanation 关于如何自己生成刷新令牌的信息。不使用 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;
}
并且在查看 jwt.io 调试器时它工作正常。
但是因为我想使用刷新令牌,所以我可以在它们过期后 "create" 更多访问令牌,我找不到关于如何创建这样的令牌的任何信息。
据我所知,访问令牌存储在本地 storage/cookie 而刷新令牌存储在数据库中。
如何创建刷新令牌,它包含什么信息?我想这不仅仅是一个随机字符串。 database/table 存储刷新令牌的架构 a 是什么样的?
我查看了 JWT 的文档,似乎您只需要创建一个 uuid、guid,它只是一个几乎不可能破解的 uniq valu/string。
我获取了那个 uuid 并将其作为 "refresh-token" 存储在本地存储中。
而且我还存储在一个包含 table 的数据库中:
编号 | user_id | refresh-token |到期日期
因此,每当 JWT 过期时,我都会使用 long-lasting 刷新令牌并检查该刷新令牌是否存在于数据库中以及它是否未过期。
然后我发回了一个新的 JWT 以及一个新的刷新令牌。
我一直在网上搜索 example/explanation 关于如何自己生成刷新令牌的信息。不使用 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;
}
并且在查看 jwt.io 调试器时它工作正常。
但是因为我想使用刷新令牌,所以我可以在它们过期后 "create" 更多访问令牌,我找不到关于如何创建这样的令牌的任何信息。
据我所知,访问令牌存储在本地 storage/cookie 而刷新令牌存储在数据库中。
如何创建刷新令牌,它包含什么信息?我想这不仅仅是一个随机字符串。 database/table 存储刷新令牌的架构 a 是什么样的?
我查看了 JWT 的文档,似乎您只需要创建一个 uuid、guid,它只是一个几乎不可能破解的 uniq valu/string。
我获取了那个 uuid 并将其作为 "refresh-token" 存储在本地存储中。 而且我还存储在一个包含 table 的数据库中: 编号 | user_id | refresh-token |到期日期 因此,每当 JWT 过期时,我都会使用 long-lasting 刷新令牌并检查该刷新令牌是否存在于数据库中以及它是否未过期。 然后我发回了一个新的 JWT 以及一个新的刷新令牌。