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

Laravel Passport: Are API's tokens stored on the server, and where?

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

如果因为它是独立的而不存储在服务器上,为什么 Laravel 的开发人员将 $table->rememberToken(); 放在默认的 create_users_table.php 迁移中? remember_token 列的用途是什么?

感谢您的帮助。

请记住,用户 table 中的令牌是用于 "Remember Me" 的,当您在网络上登录时。 Laravel:“用户”数据库table中的“remember_token”是什么?

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

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

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

我想你可以说 一些 令牌的一部分存储在数据库中。

返回的令牌是 JWT(JSON Web 令牌)。其中编码的是关于令牌的信息,比如它的到期时间、用于散列它的算法、令牌范围和它的 ID(在有效负载中它被命名为 jti)。该 ID 存储在 oauth_access_tokens table.

\Laravel\Passport\PersonalAccessTokenFactory::findAccessToken class 中的这个方法中,您可以看到 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 中,您将看到它的结构。外观如下:

现在,知道有效负载的预期格式后,如果您稍微尝试一下这些信息和 oauth_access_tokens 中的数据(ID、范围、创建和到期日期),您应该能够创建一个有效的令牌。