问题描述
我正在为我的Web应用程序实施身份验证和授权服务,已经具有登录部分(创建访问和刷新令牌)。但是我很好奇维护用户访问的最佳实践是什么。我到目前为止所拥有的:
public function authenticate(string $login,string $password): array
{
$subject = $this->subjectRepository->findByLogin($login);
// Used for blacklisting tokens
$sessionUuid = Uuid::uuid4();
if (!$subject) {
throw new UserNotFoundException();
}
// Skipped checking hash for simplicity as this is a sandBox
if ($subject->getpassword() !== $password) {
throw new InvalidCredentialsException();
}
// User is valid at this point
// Sign access token
$accesstoken = $this->jwtSigner->sign([
'session_id' => $sessionUuid,'sub' => $subject->getUsername(),'exp' => (new \DateTime())->modify('+15minutes')->getTimestamp(),'iat' => (new \DateTime())->getTimestamp(),]);
// Sign refresh token
$refreshToken = $this->jwtSigner->sign([
'session_id' => $sessionUuid,'exp' => (new \DateTime())->modify('+31days')->getTimestamp(),]);
return [
JsonWebToken::ACCESS_TOKEN => $accesstoken,JsonWebToken::REFRESH_TOKEN => $refreshToken,];
}
简要摘要,通过用户名查找用户,为“会话”创建新的UUID,以在数据库中查找刷新令牌(黑名单+清除用户会话功能)。检查凭据并签名2个令牌,15分钟有效访问令牌和31天刷新令牌(请对持续时间发表评论)
由于访问令牌非常简单,因此我不会通过验证访问令牌是否有效。我想知道应该如何刷新访问令牌。
我应该通过相应的session_id找到刷新令牌,对其进行验证,创建新的刷新令牌(还是不创建?),并将新的访问令牌作为附加字段 access_token 传递给响应正文。坚强>可以说吗?
您是否发现这种方法存在严重漏洞?
我是否忘了过程中的重要事项?
预先感谢您的帮助和见解。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)