溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Laravel中Token的實(shí)現(xiàn)機(jī)制是什么

發(fā)布時(shí)間:2023-05-18 11:47:43 來(lái)源:億速云 閱讀:152 作者:iii 欄目:編程語(yǔ)言

這篇文章主要介紹“Laravel中Token的實(shí)現(xiàn)機(jī)制是什么”的相關(guān)知識(shí),小編通過(guò)實(shí)際案例向大家展示操作過(guò)程,操作方法簡(jiǎn)單快捷,實(shí)用性強(qiáng),希望這篇“Laravel中Token的實(shí)現(xiàn)機(jī)制是什么”文章能幫助大家解決問(wèn)題。

一、令牌的概念

Token,顧名思義,就是指一種令牌,是一種標(biāo)記,可以代表某種身份信息或者授權(quán)信息。它通常由服務(wù)器產(chǎn)生并發(fā)放給客戶端,客戶端收到令牌后將其存放在本地,在后續(xù)請(qǐng)求時(shí)加入請(qǐng)求頭或者請(qǐng)求參數(shù)中,作為身份驗(yàn)證或授權(quán)的標(biāo)識(shí)。服務(wù)器通過(guò)檢查令牌是否有效,就可以確定請(qǐng)求是否具有身份驗(yàn)證或者授權(quán)信息。

令牌的使用能夠更有效地保護(hù)Web應(yīng)用免受未經(jīng)授權(quán)的訪問(wèn),尤其是在API和Web服務(wù)中,令牌是必不可少的。

二、 Laravel Token的實(shí)現(xiàn)

Laravel作為一款優(yōu)秀的Web應(yīng)用框架,在其內(nèi)置的Auth功能中提供了Token的支持。在Laravel中,Token的實(shí)現(xiàn)使用了Laravel Sanctum這個(gè)擴(kuò)展包。

2.1 Laravel Sanctum

Laravel Sanctum是一款輕量級(jí)的身份驗(yàn)證包,可以為L(zhǎng)aravel應(yīng)用程序提供API身份驗(yàn)證,基于API秘鑰或者Token,讓?xiě)?yīng)用程序更好的運(yùn)行在無(wú)狀態(tài)環(huán)境中,如SPA應(yīng)用程序、單頁(yè)應(yīng)用程序和移動(dòng)應(yīng)用程序等。Laravel Sanctum提供了以下功能:

  1. 無(wú)需配置即可開(kāi)始使用;

  2. 支持使用session、Token以及API秘鑰等多種身份驗(yàn)證方式;

  3. 內(nèi)置了多種身份驗(yàn)證的實(shí)現(xiàn),如cookie、Token、auth等;

  4. 提供了方便的身份驗(yàn)證和Token生成;

  5. 更好的自定義身份驗(yàn)證流程。

2.2 Token的實(shí)現(xiàn)原理

在Laravel Sanctum中,Token的實(shí)現(xiàn)原理與session實(shí)現(xiàn)原理類似。在請(qǐng)求中,客戶端向服務(wù)器發(fā)出請(qǐng)求時(shí),將Token作為請(qǐng)求參數(shù)或Header中的Authorization字段發(fā)送給服務(wù)器。服務(wù)器在檢查T(mén)oken是否有效,并在有效期內(nèi),給予請(qǐng)求操作的權(quán)限或者返回錯(cuò)誤信息。Token的實(shí)現(xiàn)流程如下:

  1. 創(chuàng)建Token:當(dāng)用戶登錄時(shí),Sanctum將為該用戶生成一個(gè)隨機(jī)的Token,并將該Token保存在后臺(tái)數(shù)據(jù)庫(kù)中;

  2. 發(fā)送Token:將Token作為請(qǐng)求參數(shù)或者Header中的Authorization字段發(fā)送給服務(wù)器;

  3. Token驗(yàn)證:在服務(wù)器端,Sanctum將檢查接收到的Token是否有效,并決定授權(quán)或拒絕;

  4. Tokens管理:Sanctum提供了一系列API來(lái)創(chuàng)建、撤銷、查找和驗(yàn)證Token。

三、 Laravel Token的使用

Sanctum提供了方便易用的API來(lái)使用Token,包括Token的創(chuàng)建、撤銷、查找和驗(yàn)證等。下面是Token的使用方式:

3.1 安裝 Sanctum

在應(yīng)用程序中,首先需要將Sanctum的依賴包引入到應(yīng)用的composer.json文件:

composer require laravel/sanctum

安裝完成后,需要在config/app.php文件中添加如下配置:

'providers' => [ 
    // Other service providers... 
    Laravel\Sanctum\SanctumServiceProvider::class, 
],

3.2 發(fā)布配置

在安裝完成后,需要運(yùn)行以下命令來(lái)發(fā)布Sanctum的配置文件:

php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"

3.3 配置Middleware

在使用Sanctum時(shí),需要在對(duì)應(yīng)的路由中添加中間件。在Laravel中,已經(jīng)內(nèi)置了API認(rèn)證的中間件,可以直接調(diào)用。

3.4 創(chuàng)建Token

在登錄后,可以使用如下代碼來(lái)為當(dāng)前用戶創(chuàng)建Token:

use Illuminate\Http\Request; 
use Illuminate\Support\Facades\Hash; 
use Illuminate\Validation\ValidationException; 
use App\Models\User; 
use Illuminate\Support\Facades\Auth; 
use Illuminate\Support\Facades\Route; 

// 創(chuàng)建Token 
Route::post('/api/token/create', function (Request $request) { 
    $request->validate([ 
        'email' => 'required|email', 
        'password' => 'required', 
    ]); 

    $user = User::where('email', $request->email)->first(); 

    if (! $user || ! Hash::check($request->password, $user->password)) { 
        throw ValidationException::withMessages([ 
            'email' => ['The provided credentials are incorrect.'], 
        ]); 
    } 

    return $user->createToken($request->header('User-Agent'))->plainTextToken; 
});

在上面的代碼中,可以看到在創(chuàng)建Token時(shí),使用機(jī)器的User-Agent作為額外的參數(shù)。這里的User-Agent是一個(gè)HTTP頭,記錄了瀏覽器或應(yīng)用程序的相關(guān)信息。這個(gè)信息將作為T(mén)oken的一部分,使得Token一旦被盜用或者惡意使用,可以很容易地發(fā)現(xiàn)和撤銷。

3.5 撤銷Token

創(chuàng)建的Token一旦被盜用或者失效,可以使用如下代碼撤銷:

Auth::user()->tokens()->delete();

3.6 驗(yàn)證擴(kuò)展

Sanctum還提供了良好的驗(yàn)證擴(kuò)展,可以方便地進(jìn)行訪問(wèn)控制,代碼如下:

use Illuminate\Http\Request; 
use Illuminate\Support\Facades\Hash; 
use Illuminate\Validation\ValidationException; 
use App\Models\User; 
use Illuminate\Support\Facades\Auth; 
use Illuminate\Support\Facades\Route; 
use Laravel\Sanctum\HasApiTokens;

class User extends Authenticatable 
{
    use HasApiTokens, Notifiable;
}

使用上述代碼之后,我們就可以在User模型中使用can接口來(lái)進(jìn)行訪問(wèn)控制,代碼如下:

$request->user()->can('update', $post);

在上面的代碼中,can將根據(jù)當(dāng)前用戶的角色、權(quán)限和策略,判斷用戶是否有權(quán)進(jìn)行更新操作。需要注意的是,用戶需要正確實(shí)現(xiàn)自己的訪問(wèn)控制邏輯。

關(guān)于“Laravel中Token的實(shí)現(xiàn)機(jī)制是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí),可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會(huì)為大家更新不同的知識(shí)點(diǎn)。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI