如何在不使用 Sanctum 或 Passport 的情况下在 Laravel 9 中生成访问令牌

How to generate an access token in Laravel 9 without using Sanctum or Passport

我想在不使用 Sanctum 或 Passport 的情况下实施 API 基于令牌的身份验证系统。如何生成访问令牌?我可以只生成一个随机字符串吗?

首先:我通常会尽可能使用 Laravel 的 first-party 包,因为它们是 battle-tested,在这种情况下 Laravel Sanctum 听起来是最好的选择.

但是如果您必须创建自己的实现,是的,您可以简单地生成一个随机字符串并将其存储在连接到特定用户的数据库中。事实上,这就是 Sanctum 所做的:

public function createToken(string $name, array $abilities = ['*'])
{
    $token = $this->tokens()->create([
        'name' => $name,
        'token' => hash('sha256', $plainTextToken = Str::random(40)),
        'abilities' => $abilities,
    ]);

    return new NewAccessToken($token, $token->getKey().'|'.$plainTextToken);
}

来源:https://github.com/laravel/sanctum/blob/v2.15.1/src/HasApiTokens.php#L44-L53

在这里它生成一个随机字符串并在数据库中保存一个散列。该字符串经过哈希处理,因此除了用户(甚至您)之外,没有人可以访问令牌。

如果您想设置自己的身份验证系统,您需要熟悉重要的安全概念,如 OAuth2、加密...如果不是这样,强烈建议使用由提供的脚手架解决方案之一Laravel 满足您的需求。如果您有问题,请不要犹豫,询问有关这些框架的问题。

否则,如果你真的想自己制作auth系统,你可以使用tymondesigns/jwt-auth库来生成auth token。

祝你好运!