使用 Composer 安装 Passport :
composer require laravel/passport:~4.0
Laravel 5.6 已经发布,最新的
laravel/passport
版本为5.0
适配 Laravel 5.6,所以我们需要使用 Laravel 5.5 的适配版本4.0
。
如果安装过程中遇到 paragonie/random_compat
版本冲突的问题,可以先执行以下命令将其降级为 2.0
的版本。
composer require paragonie/random_compat:^2.0
再按序执行以下命令:
php artisan migrate
php artisan passport:install
添加 Laravel\Passport\HasApiTokens
trait 到 App\User
模型
<?php
namespace App;
use Laravel\Passport\HasApiTokens;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use HasApiTokens, Notifiable;
}
接下来,你需要在 AuthServiceProvider
的 boot
方法中调用 Passport::routes
方法,该方法将会为颁发访问令牌、撤销访问令牌、客户端以及私人访问令牌注册必要的路由:
<?php
namespace App\Providers;
use Laravel\Passport\Passport;
use Illuminate\Support\Facades\Gate;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
class AuthServiceProvider extends ServiceProvider
{
/**
* The policy mappings for the application.
*
* @var array
*/
protected $policies = [
'App\Model' => 'App\Policies\ModelPolicy',
];
/**
* Register any authentication / authorization services.
*
* @return void
*/
public function boot()
{
$this->registerPolicies();
Passport::routes();
}
}
最后,在配置文件 config/auth.php
中,需要设置 api
认证 guard 的 driver
选项为 passport
。这将告知应用在认证输入的 API 请求时使用 Passport 的 TokenGuard
:
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'passport',
'provider' => 'users',
],
],
部署 Passport
第一次部署 Passport 到生产服务器时,可能需要运行 passport:keys
命令。这个命令生成 Passport 需要的加密 keys 以便生成访问令牌,生成的 keys 将不会存放在源代码控制中:
php artisan passport:keys
配置
令牌生命周期
默认情况下,Passport 颁发的访问令牌(access token)是长期有效的,如果你想要配置生命周期短一点的令牌,可以使用 tokensExpireIn
和 refreshTokensExpireIn
方法,这些方法需要在 AuthServiceProvider
的 boot
方法中调用:
/**
* 注册任意认证/授权服务
*
* @return void
*/
public function boot()
{
$this->registerPolicies();
Passport::routes();
Passport::tokensExpireIn(now()->addDays(15));
Passport::refreshTokensExpireIn(now()->addDays(30));
}
创建客户端
创建客户端最简单的方式就是使用 Artisan 命令 passport:client
,该命令可用于创建你自己的客户端以方便测试 OAuth2 功能。当你运行 client
命令时,Passport 会提示你输入更多关于客户端的信息,并且为你生成 client ID 和 secret:
php artisan passport:client