您好,登錄后才能下訂單哦!
這篇文章主要介紹“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提供了以下功能:
無(wú)需配置即可開(kāi)始使用;
支持使用session、Token以及API秘鑰等多種身份驗(yàn)證方式;
內(nèi)置了多種身份驗(yàn)證的實(shí)現(xiàn),如cookie、Token、auth等;
提供了方便的身份驗(yàn)證和Token生成;
更好的自定義身份驗(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)流程如下:
創(chuàng)建Token:當(dāng)用戶登錄時(shí),Sanctum將為該用戶生成一個(gè)隨機(jī)的Token,并將該Token保存在后臺(tái)數(shù)據(jù)庫(kù)中;
發(fā)送Token:將Token作為請(qǐng)求參數(shù)或者Header中的Authorization字段發(fā)送給服務(wù)器;
Token驗(yàn)證:在服務(wù)器端,Sanctum將檢查接收到的Token是否有效,并決定授權(quán)或拒絕;
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)。
免責(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)容。