繁体   English   中英

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

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

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

首先:我通常会尽可能使用 Laravel 的第一方包,因为它们经过了实战测试,在这种情况下, 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 提供的脚手架解决方案之一来满足你的需要. 如果您有问题,请随时提出有关这些框架的问题。

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

祝你好运 !

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM