Php 如何使用刷新令牌正确实现JWT身份验证? 我正在为我的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, 'sub' => $subject->getUsername(), 'exp' => (new \DateTime())->modify('+31days')->getTimestamp(), 'iat' => (new \DateTime())->getTimestamp(), ]); return [ JsonWebToken::ACCESS_TOKEN => $accessToken, JsonWebToken::REFRESH_TOKEN => $refreshToken, ]; }

Php 如何使用刷新令牌正确实现JWT身份验证? 我正在为我的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, 'sub' => $subject->getUsername(), 'exp' => (new \DateTime())->modify('+31days')->getTimestamp(), 'iat' => (new \DateTime())->getTimestamp(), ]); return [ JsonWebToken::ACCESS_TOKEN => $accessToken, JsonWebToken::REFRESH_TOKEN => $refreshToken, ]; },php,authentication,jwt,authorization,websecurity,Php,Authentication,Jwt,Authorization,Websecurity,简要摘要按用户名查找用户,为“会话”创建新的UUID,用于在数据库中查找刷新令牌(黑名单+清除用户会话功能)。检查凭据并签署2个令牌、15分钟有效访问令牌和31天刷新令牌(请对持续时间发表评论) 我不会验证访问令牌是否有效,因为它非常简单。我想知道如何刷新访问令牌。 我是否应该通过相应的会话id找到刷新令牌,验证它,创建新的刷新令牌(或否?),并将新的访问令牌作为附加字段访问令牌传递给响应主体? 您是否发现此方法存在严重漏洞? 在这个过程中我是否忘记了一些重要的事情? 提前感谢您的帮助和见解

简要摘要按用户名查找用户,为“会话”创建新的UUID,用于在数据库中查找刷新令牌(黑名单+清除用户会话功能)。检查凭据并签署2个令牌、15分钟有效访问令牌和31天刷新令牌(请对持续时间发表评论)

我不会验证访问令牌是否有效,因为它非常简单。我想知道如何刷新访问令牌。

我是否应该通过相应的会话id找到刷新令牌,验证它,创建新的刷新令牌(或否?),并将新的访问令牌作为附加字段访问令牌传递给响应主体?

您是否发现此方法存在严重漏洞?

在这个过程中我是否忘记了一些重要的事情?

提前感谢您的帮助和见解