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)