使用Laravel Passport做Api認證(一)——安裝和基本使用

!!?。∞D載請注明作者和本文鏈接!!??!

前言

隨著公司業(yè)務的發(fā)展,需要把各個業(yè)務后臺通用的功能,抽出來做成單獨的項目,并后臺接口,供各個業(yè)務后臺使用,所以要研究一下怎么使用Api認證??戳艘幌沦Y料,Laravel官方給的Passport擴展包,提供了整個OAuth2.0的功能,所以就準備用Passport實現Api認證

介紹Passport的文檔一大堆,從安裝到是有都有非常詳細的步驟,會告訴你每一步執(zhí)行什么命令,去什么文件加什么代碼
比如:
Passport OAuth 認證
Laravel Passport 多表用戶認證踩坑
Laravel Passport API 認證使用小結
但是很少有一步步展開來講每一步是為了解決什么問題,設置為什么那么做,代碼為什么要那么寫。當然,這里并不是說上面兩篇文章不好,文檔和文章寫得挺好的。只是個人覺得從學習的角度去看,很多時候遇到問題,不是說單純的復制粘貼代碼解決項目問題就完事了,更多的是要多問幾個為什么,最后才能靈活掌握和運用這個知識,自己的能力才能得到增長。

廢話不多說了,進入正題,這篇先講一下Passport的安裝和基本使用。(以下需要laravel使用和OAuth2.0的基本知識,小白可以先去學習一下)

1.passport安裝

以安裝4.0為例

composer require laravel/passport:~4.0

如果遇到paragonie/random_compat版本不兼容的問題安裝命令,可以先執(zhí)行以下命令讓paragonie/random_compat版本回退,再用上面的命令安裝passport

composer require paragonie/random_compat:^2.0

2.做passport的數據遷移

passport會使用到一些數據庫表,執(zhí)行這個遷移,就會在數據庫中生成這些表,其中XXXXX為環(huán)境名(現在公司使用一般都是多環(huán)境,如果單一環(huán)境就不用加--env參數了)

php artisan migrate  --env=XXXXX 

3.創(chuàng)建生成安全訪問令牌(token)所需的加密鍵

php artisan passport:keys

執(zhí)行完這個以后,在項目的storage文件夾下就會生成oauth-private.key和oauth-public.key。請注意,這兩個文件是機器相關的,所以不應該提交到源代碼控制(比如SVN,GIT等)中,應該在第一次部署的時候讓機器生成。

4.注冊路由

Passport::routes()給我們提供了passport使用的路由,我們要先去注冊一下(我用的是laravel5.5,后面的要不要注冊,我就不知道了,大家可以去查一下具體的文檔)

app/Providers/AuthServiceProvider.php

use Carbon\Carbon;
use Laravel\Passport\Passport;
.
.
.
public function boot()
{
    $this->registerPolicies();

    // Passport的路由,這句是一定要加上
    Passport::routes();
    //下面是設置token的過期時間,默認是永久,如果要永久就不用寫下面兩行代碼了
    //設置 access_token 15天過期
    Passport::tokensExpireIn(Carbon::now()->addDays(15));
    //設置 refreshTokens 30天過期
    Passport::refreshTokensExpireIn(Carbon::now()->addDays(30));
}
.
.
.

5.生成客戶端

(1)命令行生成
如果用的是密碼模式,可以使用下面的命令生成一個密鑰,XXX可以指定名字,你可以根據項目需要起名字

php artisan passport:client --password --name='XXX'

然后命令行會給出clientID和client secret,保存下來

這里需要說明一點:
php artisan passport:keys和php artisan passport:install的區(qū)別

passport:install 用來創(chuàng)建生成安全訪問令牌時所需的加密密鑰,同時,這條命令也會創(chuàng)建用于生成訪問令牌的「個人訪問」客戶端和「密碼授權」客戶端
(詳見 Passport OAuth 認證)

所以,如果前面用了install后面就不需要再執(zhí)行生成客戶端這一步了。如果你只想要密鑰+密碼授權客戶端,你就拆開來做

(2)接口生成

接口:POST /oauth/clients
因為我項目中是機器對機器的認證,就用的client模式


image.png

6.更改Guard和Provider

app/Providers/AuthServiceProvider.php

        'api' => [
            'driver' => 'passport',  //api認證,這里需要改成passport
            'provider' => 'users',  //這里填的是下面providers里面提供
        ],

     'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\User::class, //你可以根據項目需要,改成項目里其他的model,但是這個model必需要extend Authenticatable
        ],
    ],

7.給Api加上認證

(1)授權碼模式

Route::post('/a/b','XXController@getResult')->middleware('auth:api');

(2)client模式
先去注冊中間件
app/Http/kernel.php

use Laravel\Passport\Http\Middleware\CheckClientCredentials;
    protected $routeMiddleware = [
        ...
        'client' => CheckClientCredentials::class,
    ];

然后加上驗證

Route::post('/a/b','XXController@getResult')->middleware('client');

8.調試

我們直接在postman中給/a/b發(fā)送請求,不帶token


image.png

接下來,我們帶著token給接口發(fā)送請求


image.png

可以正常訪問了!

后續(xù)的篇章會繼續(xù)寫如何自定義Passport的配置以及返回等等

?。。?!轉載請注明作者和本文鏈接!?。?!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容