laravel5.7/passport 密码授权简单使用
laravel/passport 有多种使用方式,本文只讲密码授权的使用方式。
一、安装
composer require laravel/passport
php artisan migrate
php artisan passport:install // 自动创建两个默认客户端
php artisan passport:client --password //创建自己的password专用客户端
二、增加路由: app/Providers/AuthServiceProvider.php文件中增加代码
use Laravel\Passport\Passport; //这里载入Passport
public function boot() {
$this->registerPolicies();
Passport::routes(); //这里加载passport路由 为 颁发访问令牌、撤销访问令牌、客户端以及私人访问令牌 注册必要的路由
Passport::refreshTokensExpireIn(now()->addDays(30));//令牌默认长期有效 或tokensExpireIn 限制有效期
}
三、配置文件 config/auth.php 设置 api 认证 guard 的 driver 选项为 passport
'guards' => [
'api' => [
'driver' => 'passport',
'provider' => 'outhusers', //指定账号的provider中的表
],
],
'providers' => [
'outhusers' => [
'driver' => 'eloquent',
'model' => App\OuthUser::class, //数据表model 密码验证的username password 就是此表中的账号密码
],
],
注意需要自行创建 OuthUser 表,用于获取token
四、获取token (获取token可自行通过接口优化,设置为只传账号密码即可)
// 访问 http://www.test.com/auth/password 即可看到token,api路由中访问:http://www.test.com/api/auth/password
Route::get('/auth/password', function (\Illuminate\Http\Request $request){
$http = new \GuzzleHttp\Client();
$response = $http->post('http://www.shop.org:7888/oauth/token', [
'form_params' => [
'grant_type' => 'password', // 密码模式固定为 password
'client_id' => '3', // 通过 passport:client
创建的客户端id
'client_secret' => 'CnHjnzGK4iY4qATfePzf9465kUNAD6m2mcFxQ6DE', //通过 passport:client
创建的客户端 secret
'username' => 'admin@qq.com', //登录的用户名,OuthUser表中任意用户邮箱账号;
'password' => 'admin123', //密码
'scope' => '', //作用域,可填写 *
或者为空
],
]);
return json_decode((string)$response->getBody(), true);
});
五、设置路由保护
前面用的是 guard 中的api
Route::group(['middleware' => 'auth:api'], function ($router) {
Route::get('/test', function (\Illuminate\Http\Request $request){
echo 'ok';
exit;
});// 将所有需要保护的路由放此处即可
});
Route::get('/user', function () { echo 'ok';})->middleware('auth:api');
六、请求header设置访问令牌token
// $accessToken 为返回的token
$response = $client->request('GET', '/api/user', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.$accessToken,
],
]);
6.5 其他
添加 HasApiTokens trait(代码复用)到自己的接口模型中, 此模型提供一些辅助函数用于检查用户的token和scope
use Laravel\Passport\HasApiTokens;
class User extends Authenticatable{
use HasApiTokens;
}
七、结束
参考:Passport(Laravel5.5.*)密码授权简单使用
[ Laravel 5.7 文档 ] 安全系列 —— API 认证(Passport)