php passport security,Laravel 的 API 认证系统 Passport 三部曲(一、passport安装+配置)

本文详细介绍了在Laravel中使用Passport实现API授权的过程,包括安装、配置Passport,修改用户表字段以适应自定义用户模型,设置权限和过期时间,以及在AuthServiceProvider中的配置。此外,还强调了使用自定义用户表时需要注意的事项,为后续的令牌发放和整体API授权认证流程奠定了基础。
摘要由CSDN通过智能技术生成

Laravel 的 API 认证系统 Passport 三部曲(一、passport安装+配置)

博主最近在搞app开发,但是用户的登录授权因为不能像web一样实用session驱动授权,这里我们使用Laravel 中的 Passport 实现 API 授权过程。Passport 基于 League OAuth2 server 实现。

坑:中文文档对授权的介绍不全,文档的例子都是基于laravel自带的user表来进行的设计开发,但是其用户表往往满足不了我们的需求,需要自己设计用户表,如何让自建的用户表去完美兼容auth认证,下文给你答案。

这里我的用户表为“login”表,主键为char(32)的guid(默认的user表主键为自增id),用户名为varchar(64)的username(默认的user表用户名为email)

安装

和普通的composer组件安装一样,按照文档一步一步来即可

执行

composer require laravel/passport

将 Passport 的服务提供者注册到配置文件 config/app.php 的 providers 数组中:

Laravel\Passport\PassportServiceProvider::class,

Passport 使用服务提供者注册内部的数据库迁移脚本目录,所以上一步完成后,你需要更新你的数据库结构。Passport 的迁移脚本会自动创建应用程序需要的客户端数据表和令牌数据表:

地址:/vendor/laravel/passport/database/migrations

坑:由于用户表的用户id为char(32),默认为自增id,这里四个表的用户id(user_id)类型需要进行修改为char(32)(如果设计到团队开发最好是新建修改字段类型的migration来修改用户id类型)

$table->char('user_id',32);

执行:

php artisan migrate

有些会报错“ Changing columns for table "oauth_auth_codes" requires Doctrine DBAL; install "doctrine/dbal". ”,需要安装组件,执行如下命令

composer require doctrine/dbal

接下来,你需要运行 passport:install 命令来创建生成安全访问令牌时用到的加密密钥,同时,这条 命令也会创建「私人访问」客户端和「密码授权」客户端:

执行:

php artisan passport:install

上面命令执行后,请将 Laravel\Passport\HasApiTokens Trait 添加到 App\Login 模型中,这个 Trait 会给你的模型提供一些辅助函数,用于检查已认证用户的令牌和使用作用域:

如果装了ideaHelp组件可以按ctrl追加进去看具体属性和功能

由于使用了自建用户表,这里要将表名、主键类型、主键名、用户名重写

namespace App\Model;

use Laravel\Passport\HasApiTokens;

use Illuminate\Notifications\Notifiable;

use Illuminate\Foundation\Auth\User as Authenticatable;

class Login extends Authenticatable

{

use HasApiTokens, Notifiable;

// 表名

protected $table = 'data_login_info';

// 主键

protected $primaryKey = 'guid';

// 主键类型

protected $keyType = 'string';

/**

* 说明:自定义授权用户名(默认为email)

*

* @param $username

* @return \Illuminate\Database\Eloquent\Model|null|static

* @author 郭庆

*/

public function findForPassport($username)

{

return CompanyLogin::where('username', $username)->first();

}

}

接下来,需要在 AuthServiceProvider 的 boot 方法中调用 Passport::routes 、enableImplicitGrant、tokensCan、tokensExpireIn、refreshTokensExpireIn具体作用看注释。

public function boot()

{

$this->registerPolicies();

// 会注册一些在访问令牌、客户端、私人访问令牌的发放和吊销过程中会用到的必要路由

Passport::routes();

// 简化授权

// Passport::enableImplicitGrant();

// 定义令牌作用域

Passport::tokensCan([

'place-orders' => 'Place orders',

'check-status' => 'Check order status',

]);

// accessToken有效期

Passport::tokensExpireIn(Carbon::now()->addDays(15));

// accessRefushToken有效期

Passport::refreshTokensExpireIn(Carbon::now()->addDays(30));

}

7. 最后,需要将配置文件 config/auth.php 中 api 部分的授权保护项( driver )改为 passport 。此调整会让你的应用程序在接收到 API 的授权请求时使用 Passport 的 TokenGuard 来处理:

```

'guards' => [

'web' => [

'driver' => 'session',

'provider' => 'login',

],

'api' => [

'driver' => 'passport',

'provider' => 'login',

],

],

'providers' => [

'login' => [

'driver' => 'eloquent',

'model' => App\Model\Login::class,

]

],

```

8. 以上步骤完成之后,passport的安装就完成了,具体配置的修改根据自己的新建的用户表来进行修改配置。

9. 明后天博主会出具体的令牌发放修改(二部曲)、整体实现api授权认证登录api整体流程(三部曲)尽请期待!

> 本文博主**亲自**手码,手写不易,欢迎转载,**打赏**,转载请**注明出处**,否则后果自负!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值