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

时间:2018-05-09 13:09:50

标签: php laravel jwt token laravel-passport

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

如果它没有存储在服务器上,因为它是自包含的,为什么Laravel的开发人员将$table->rememberToken();置于默认的create_users_table.php迁移中?专栏remember_token的目的是什么?

感谢您的帮助。

3 个答案:

答案 0 :(得分:5)

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

返回的令牌为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')
    );
}

如果获得有效的令牌并将其粘贴到this online tool中,您将看到它的结构。外观如下:

screenshot of the parsed token

现在,知道有效载荷的预期格式了,如果您稍微了解一下此信息和oauth_access_tokens中的数据(id,作用域,创建和到期日期),就应该能够创建有效的令牌。

答案 1 :(得分:1)

当您登录网络时,记住用户表中的令牌是“记住我”。 how to show Back/Forward buttons in Android Studio 3.0.1 IDE

如果您使用护照并创建API,您可以在数据库的oauth_access_tokens中找到令牌ID。

答案 2 :(得分:0)

不,访问令牌值不会存储在任何地方。如果你失去它,它就消失了。您需要重新生成新令牌。

rememeber_token字段用于"记住我"正常Web身份验证的功能。它完全与Passport API身份验证无关。