مارک پلاس

تکنولوژی نوین اینترنتی

احراز هویت API با Passport و Sanctum

دسته‌بندی‌ها

احراز هویت API با Passport و Sanctum
احراز هویت API با Passport و Sanctum

در لاراول، برای احراز هویت API دو روش اصلی Passport و Sanctum وجود دارند که هرکدام برای شرایط مختلف مناسب هستند. در اینجا، نحوه استفاده از هر دو را توضیح خواهیم داد.

فصل 1: استفاده از Laravel Passport برای احراز هویت API

Passport یک بسته کامل برای احراز هویت API است که از OAuth2 استفاده می‌کند. این روش معمولاً برای پروژه‌هایی با نیاز به احراز هویت پیچیده‌تر و چندین سطح دسترسی مناسب است.

1.1. نصب و راه‌اندازی Passport

  1. نصب بسته Passport:

    ابتدا با استفاده از Composer بسته Passport را نصب کنید:

    bash
    composer require laravel/passport
  2. انتشار فایل‌های پیکربندی:

    برای انتشار فایل‌های پیکربندی Passport، دستور زیر را اجرا کنید:

    bash
    php artisan vendor:publish --provider="Laravel\Passport\PassportServiceProvider"
  3. اجرای مایگریشن‌ها:

    Passport برای ایجاد جداول مربوط به احراز هویت نیاز به مایگریشن دارد. بنابراین، دستور زیر را اجرا کنید:

    bash
    php artisan migrate
  4. تنظیمات مدل User:

    در مدل User، باید از Laravel\Passport\HasApiTokens استفاده کنید تا این مدل از قابلیت‌های Passport برای تولید و تأیید توکن‌ها بهره‌مند شود. برای این کار، کد زیر را به مدل User اضافه کنید:

    php
    use Laravel\Passport\HasApiTokens; class User extends Authenticatable { use HasApiTokens; }
  5. راه‌اندازی Passport:

    سپس در فایل AuthServiceProvider، باید Passport را راه‌اندازی کنید. در متد boot، کد زیر را اضافه کنید:

    php
    use Laravel\Passport\Passport; public function boot() { Passport::routes(); }
  6. تنظیمات API Guard:

    در فایل config/auth.php، تنظیمات guard را به این صورت به‌روز کنید:

    php
    'guards' => [ 'api' => [ 'driver' => 'passport', 'provider' => 'users', ], ],

1.2. ایجاد Client برای Passport

برای استفاده از Passport و تولید توکن‌ها، باید یک client ایجاد کنید. از دستور زیر برای ایجاد client استفاده کنید:

bash
php artisan passport:client --personal

این دستور یک Personal Access Token ایجاد می‌کند. به یاد داشته باشید که این کلید‌ها برای درخواست‌های احراز هویت استفاده خواهند شد.

1.3. احراز هویت با Passport

  1. ثبت‌نام و ورود کاربر:

    برای ثبت‌نام یا ورود، از متد createToken استفاده می‌کنیم تا توکن دسترسی ایجاد کنیم.

    مثال:

    php
    use App\Models\User; use Illuminate\Http\Request; Route::post('/login', function (Request $request) { $user = User::where('email', $request->email)->first(); if (Hash::check($request->password, $user->password)) { return response()->json([ 'token' => $user->createToken('API Token')->accessToken ]); } return response()->json(['error' => 'Unauthorized'], 401); });

    در اینجا:

    • توکن دسترسی برای کاربری که وارد شده است، تولید می‌شود.

    • این توکن به‌عنوان پاسخ به کاربر باز می‌گردد.

  2. احراز هویت با استفاده از Token در درخواست‌های API:

    حالا که توکن دسترسی دارید، می‌توانید از آن در هدر درخواست‌ها استفاده کنید:

    bash
    Authorization: Bearer YOUR_ACCESS_TOKEN

    این توکن باید در هدر HTTP ارسال شود تا بتوان از دسترسی‌های محدود استفاده کرد.

1.4. استفاده از Passport برای احراز هویت در مسیرها

برای استفاده از احراز هویت در مسیرها، می‌توانید از auth:api در مسیرهای خود استفاده کنید:

php
Route::middleware('auth:api')->get('/user', function (Request $request) { return $request->user(); });

در اینجا، اگر کاربر توکن معتبری داشته باشد، به اطلاعات کاربری دسترسی خواهد داشت.


فصل 2: استفاده از Laravel Sanctum برای احراز هویت API

Sanctum یک راه‌حل ساده‌تر برای احراز هویت API است که معمولاً برای برنامه‌های تک‌صفحه‌ای (SPA) و موبایل‌ها مناسب است. برخلاف Passport، Sanctum پیچیدگی کمتری دارد و برای احراز هویت توکن‌های ساده استفاده می‌شود.

2.1. نصب و راه‌اندازی Sanctum

  1. نصب بسته Sanctum:

    ابتدا بسته Sanctum را نصب کنید:

    bash
    composer require laravel/sanctum
  2. انتشار فایل‌های پیکربندی:

    پس از نصب، فایل پیکربندی Sanctum را منتشر کنید:

    bash
    php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
  3. اجرای مایگریشن‌ها:

    Sanctum نیاز به جدول personal_access_tokens دارد که باید با استفاده از مایگریشن‌ها ایجاد شود:

    bash
    php artisan migrate
  4. افزودن Middleware به فایل api:

    در فایل app/Http/Kernel.php، باید Middleware Sanctum را به گروه api اضافه کنید:

    php
    'api' => [ \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, 'throttle:api', \Illuminate\Routing\Middleware\SubstituteBindings::class, ],
  5. تنظیم مدل User:

    در مدل User باید از HasApiTokens استفاده کنید تا قابلیت تولید و مدیریت توکن‌ها را داشته باشید:

    php
    use Laravel\Sanctum\HasApiTokens; class User extends Authenticatable { use HasApiTokens; }

2.2. ایجاد توکن برای کاربر

برای ایجاد توکن‌های شخصی، از متد createToken استفاده می‌کنیم. به‌عنوان مثال، در متد login، می‌توانیم این توکن‌ها را برای کاربر ایجاد کنیم.

مثال:

php
use App\Models\User; use Illuminate\Http\Request; Route::post('/login', function (Request $request) { $user = User::where('email', $request->email)->first(); if (Hash::check($request->password, $user->password)) { $token = $user->createToken('API Token')->plainTextToken; return response()->json(['token' => $token]); } return response()->json(['error' => 'Unauthorized'], 401); });

2.3. احراز هویت با استفاده از توکن در Sanctum

برای احراز هویت با استفاده از Sanctum، کاربر باید توکنی را که از سیستم دریافت کرده است، در هدر درخواست‌های خود ارسال کند:

bash
Authorization: Bearer YOUR_ACCESS_TOKEN

2.4. استفاده از Sanctum برای احراز هویت در مسیرها

برای محدود کردن دسترسی به برخی از مسیرها، می‌توانید از middleware auth:sanctum استفاده کنید:

php
Route::middleware('auth:sanctum')->get('/user', function (Request $request) { return $request->user(); });

این کد تضمین می‌کند که تنها کاربرانی که توکن معتبر دارند، قادر به دسترسی به اطلاعات خود هستند.


نتیجه‌گیری

  • Laravel Passport برای پروژه‌هایی که نیاز به احراز هویت پیچیده و استفاده از OAuth2 دارند مناسب است. این روش به شما امکان می‌دهد که با سیستم‌های خارجی نیز ارتباط برقرار کنید.

  • Laravel Sanctum برای پروژه‌های ساده‌تر و برنامه‌های تک‌صفحه‌ای (SPA) که نیاز به احراز هویت ساده دارند مناسب است. این روش راه‌حلی سریع و ساده برای احراز هویت فراهم می‌کند.

هر دو روش امنیت بالا و عملکرد مناسبی دارند، اما انتخاب بین این دو بستگی به پیچیدگی نیازهای پروژه شما دارد.

محتوای مرتبط

پست‌های مرتبط