rcerljenko/laravel-paseto

适用于 Laravel PHP 框架的简单 PASETO 身份验证

2.2.0 2024-06-18 05:57 UTC

This package is auto-updated.

Last update: 2024-09-18 06:25:19 UTC


README

使用 paragonie/paseto 作为底层库,为 Laravel PHP 框架提供简单的 PASETO 身份验证。

安装

标准的 Composer 包安装

composer require rcerljenko/laravel-paseto -v

使用方法

  1. 发布配置文件。这将创建一个用于基本配置选项的 config/paseto.php 文件。
php artisan vendor:publish --provider="RCerljenko\LaravelPaseto\LaravelPasetoServiceProvider" --tag="config"
  1. 使用 paseto 驱动器在您的身份验证配置文件中添加一个新的身份验证保护者。
// config/auth.php

'guards' => [
 'web' => [
  'driver' => 'session',
  'provider' => 'users',
 ],

 'api' => [
  'driver' => 'paseto',
  'provider' => 'users',
 ],
],
  1. 使用此新保护者保护您的 API 路由。
// routes/api.php

use Illuminate\Support\Facades\Route;

Route::middleware('auth:api')->group(function () {
 // PASETO protected routes
});
  1. 在您的 Auth 模型(例如 User)上使用此包提供的 HasPaseto 特性。
namespace App\Models;

use Illuminate\Notifications\Notifiable;
use RCerljenko\LaravelPaseto\Traits\HasPaseto;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
 use Notifiable, HasPaseto;
}

现在您可以在您的 User 模型上访问 token() 方法,例如

$user = User::findOrFail(1);
$user->token();

您可能需要通过 Login 控制器或用户资源返回此令牌。

配置

在发布配置后,此包通过 config/paseto.php 文件提供简单的配置。让我们逐一了解每个配置选项。

  • secret-key - 用于编码/解码令牌的密钥。它必须是一个 32 字节的随机字符串。记住,如果您更改此密钥,所有活动的 PASETO 令牌都将无效。
  • expiration - 默认令牌过期时间(以分钟为单位)。您可以将它设置为 null,这样令牌将永远不会过期。
  • issuer - 令牌发行者声明。
  • audience - 令牌受众声明。
  • claims - 将应用于所有令牌的默认声明(除了解码和验证所需的必需声明)。

这是所有令牌的全局配置。除此之外,库还提供了通过 HasPaseto 特性辅助方法提供的本地模型配置。

  • getJwtId() - 应返回用于从数据库检索该模型所使用的模型唯一键。默认为主键。
  • getJwtValidFromTime() - 应返回 null(默认)或一个 Carbon 实例。如果您想创建不立即生效的令牌,可以使用它。
  • getJwtValidUntilTime() - 应返回 null 或一个 Carbon 实例。这设置了 JWT 过期时间,默认情况下使用配置文件中的 expiration 选项。
  • getJwtCustomClaims() - 应返回一个包含您想要作为令牌一部分的额外自定义声明的键值数组。默认为空数组。

您还可以直接在 token() 方法上使用配置,然后覆盖所有其他配置,例如

$user->token([
 'id' => $user->email,
 'valid_from' => now()->addHour(),
 'valid_until' => now()->addDay(),
 'claims' => [
  'extra1' => 'foo',
  'extra2' => 'bar'
 ]
]);

您不需要覆盖所有配置选项,只需更改您希望更改的选项即可。

请求

令牌可以通过以下三种方式之一从请求中提取

  1. Authorization: Bearer {token} 标题中提取(最常见)。
  2. 从 URL 查询参数 token 中提取。
  3. 使用 token 字段名从请求体中提取。