当前位置:首页 > PHP

php实现passport

2026-02-14 19:24:54PHP

PHP 实现 Passport 认证

Passport 是 Laravel 官方提供的 OAuth2 服务器实现,用于 API 认证。以下是在 PHP 中实现 Passport 的步骤:

安装 Laravel Passport

确保已经安装了 Laravel 框架。通过 Composer 安装 Passport:

composer require laravel/passport

数据库迁移

Passport 的服务提供者会注册自己的数据库迁移目录。运行迁移命令创建 Passport 所需的数据表:

php artisan migrate

生成加密密钥

运行以下命令生成加密密钥,用于生成安全的访问令牌:

php artisan passport:install

配置 Passport

App\Models\User 模型中添加 HasApiTokens trait:

use Laravel\Passport\HasApiTokens;

class User extends Authenticatable
{
    use HasApiTokens, HasFactory, Notifiable;
}

App\Providers\AuthServiceProviderboot 方法中注册 Passport 路由:

use Laravel\Passport\Passport;

public function boot()
{
    $this->registerPolicies();

    Passport::routes();
}

config/auth.php 配置文件中,将 API 认证驱动设置为 passport

'guards' => [
    'api' => [
        'driver' => 'passport',
        'provider' => 'users',
    ],
],

创建客户端

可以使用 Artisan 命令创建客户端:

php artisan passport:client

使用 Passport 进行认证

在路由中使用 auth:api 中间件保护 API 路由:

Route::get('/user', function () {
    return auth()->user();
})->middleware('auth:api');

获取访问令牌

客户端可以通过 OAuth2 授权码或密码授权方式获取访问令牌。以下是密码授权的示例请求:

curl -X POST http://your-app.com/oauth/token \
     -H "Accept: application/json" \
     -d "grant_type=password" \
     -d "client_id=client-id" \
     -d "client_secret=client-secret" \
     -d "username=user@example.com" \
     -d "password=password" \
     -d "scope=*"

刷新令牌

当访问令牌过期时,可以使用刷新令牌获取新的访问令牌:

curl -X POST http://your-app.com/oauth/token \
     -H "Accept: application/json" \
     -d "grant_type=refresh_token" \
     -d "refresh_token=refresh-token" \
     -d "client_id=client-id" \
     -d "client_secret=client-secret"

撤销令牌

可以通过撤销令牌使令牌失效:

$user->tokens()->where('id', $tokenId)->delete();

自定义令牌有效期

App\Providers\AuthServiceProviderboot 方法中自定义令牌有效期:

Passport::tokensExpireIn(now()->addDays(15));
Passport::refreshTokensExpireIn(now()->addDays(30));

使用作用域

定义作用域并分配给令牌:

Passport::tokensCan([
    'place-orders' => 'Place orders',
    'check-status' => 'Check order status',
]);

在请求令牌时指定作用域:

curl -X POST http://your-app.com/oauth/token \
     -d "grant_type=password" \
     -d "client_id=client-id" \
     -d "client_secret=client-secret" \
     -d "username=user@example.com" \
     -d "password=password" \
     -d "scope=place-orders check-status"

前端集成

在前端 JavaScript 应用中,可以使用 Laravel Passport 的 JavaScript SDK 轻松进行认证:

axios.get('/api/user', {
    headers: {
        'Authorization': 'Bearer ' + token
    }
})
.then(response => {
    console.log(response.data);
});

以上步骤展示了如何在 PHP 中使用 Laravel Passport 实现 OAuth2 认证服务器。根据应用需求,可以进一步定制和扩展功能。

php实现passport

标签: phppassport
分享给朋友:

相关文章

php实现搜索功能

php实现搜索功能

实现基础搜索功能 使用PHP和MySQL实现基础的搜索功能需要结合表单提交与数据库查询。创建一个HTML表单用于接收用户输入的搜索关键词,通过PHP处理表单数据并查询数据库。 // 搜索表单 (HT…

php实现打印功能

php实现打印功能

PHP 实现打印功能的方法 PHP 可以通过多种方式实现打印功能,具体取决于打印的目标(如打印机、PDF、网页等)和需求(如直接打印、生成打印预览等)。以下是几种常见的实现方式: 使用 JavaSc…

php实现树

php实现树

PHP实现树结构的方法 在PHP中实现树结构通常可以通过递归或迭代的方式完成。以下是几种常见的实现方法: 递归实现树结构 递归是处理树结构的自然方式,尤其适用于具有未知深度的树。 class…

php 路由实现

php 路由实现

PHP 路由实现方法 在 PHP 中实现路由功能有多种方式,以下是几种常见的实现方法: 使用原生 PHP 实现 通过解析 URL 并匹配对应的控制器和动作: $request = $_SERV…

php 购物车实现

php 购物车实现

数据库设计 购物车功能通常需要设计数据库表存储商品和用户信息。常见的表包括products(商品表)、users(用户表)和cart(购物车表)。cart表通常包含字段:id(主键)、user_id(…

php实现分类

php实现分类

PHP实现分类的方法 数据库设计 创建分类表时,通常需要包含id、名称、父级id等字段。父级id用于实现多级分类结构。 CREATE TABLE categories ( id INT A…