【发布时间】:2018-09-15 04:50:13
【问题描述】:
我一直在网上搜索有关如何自己生成刷新令牌的示例/说明。不使用任何服务,如 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 调试器时,它工作正常。
但由于我想使用刷新令牌,以便在它们过期后“创建”更多访问令牌,所以我找不到任何有关如何创建此类令牌的信息。
据我所知,访问令牌存储在本地存储/cookie 中,而刷新令牌存储在数据库中。
如何创建刷新令牌,它包含什么信息?我想这不仅仅是一个随机字符串。存储刷新令牌的数据库/表的架构a是什么样的?
【问题讨论】:
-
我对同样的问题感兴趣。您是否找到了一个很好的资源来实现这一目标?还有刷新令牌的验证/认证是如何工作的?我遇到的所有资源都涉及框架或库。