Laravel Passport:API的令牌存储在服务器上吗?在哪里?

Jac*_*chi 1 php token jwt laravel laravel-passport

我试图找到该方法返回的令牌$user->createToken('MyApp')->accessToken;存储在数据库中的位置,但似乎找不到。它首先存储在服务器中吗?如果是这样,在哪里?

如果由于它是独立的而未存储在服务器上,那么Laravel的开发人员为什么要进行$table->rememberToken();默认create_users_table.php迁移?专栏的目的是remember_token什么?

谢谢您的帮助。

Ele*_*ska 8

我猜您可以说令牌的某些部分存储在数据库中。

返回的令牌是JWT(JSON Web令牌)。在其中编码的是关于令牌的信息,例如令牌的到期时间,用于对其进行哈希处理的算法,令牌作用域及其ID(在有效负载中称为jti)。该ID是oauth_access_tokens表中存储的ID 。

\Laravel\Passport\PersonalAccessTokenFactory::findAccessToken该类的此方法中,您可以看到Laravel如何检查令牌是否在数据库中:

 /**
 * Get the access token instance for the parsed response.
 *
 * @param  array  $response
 * @return Token
 */
protected function findAccessToken(array $response)
{
    return $this->tokens->find(
        $this->jwt->parse($response['access_token'])->getClaim('jti')
    );
}
Run Code Online (Sandbox Code Playgroud)

如果您获得有效的令牌并将其粘贴到此在线工具中,您将看到它的结构。外观如下:

解析的令牌的屏幕截图

现在,知道了有效载荷的预期格式,如果您稍微了解一下此信息以及您所拥有的数据oauth_access_tokens(ID,范围,创建和到期日期),就应该能够创建有效的令牌。