سی ام اس نویسسی ام اس نویسیاد بگیر، سیستم خودتو بنویس
مجلهتماس با ما
سی ام اس نویسسی ام اس نویس

CMS نویس مرجعی برای آموزش برنامه نویسی وب و PHP، توسعه افزونه‌های اختصاصی وردپرس، طراحی ورک‌فلو و اتوماسیون با n8n و توسعه CMS های اختصاصی است. هدف ما ارائه آموزش‌های کاربردی و راهکارهای حرفه‌ای برای توسعه‌دهندگان، کسب‌وکارها و علاقه‌مندان به دنیای برنامه‌نویسی است.

پیوندهای سریع
محصولات فیزیکیمحصولات دیجیتالدوره‌های آموزشی
سی ام اس نویس
مجله سی ام اس نویستماس با ماپنل کاربری
سی ام اس نویس — تمامی حقوق برای سی ام اس نویس محفوظ است. © 1406 تماس با ما09307711941
Laravel Sanctum چیست؟ آموزش کامل احراز هویت API در لاراول

Laravel Sanctum چیست؟ آموزش کامل احراز هویت API در لاراول

ممدیر کل سیستم ۱۷ مهر ۱۴۰۵ ۱۸ دقیقه مطالعه ۱ بازدید
Laravel Sanctum چیست؟ آموزش کامل احراز هویت API در لاراول

امروزه بسیاری از نرم‌افزارهای تحت وب تنها به یک وب‌سایت ساده محدود نیستند. ممکن است یک پروژه Laravel دارای اپلیکیشن موبایل، پنل مدیریت جداگانه، رابط کاربری ساخته‌شده با Vue یا React و چند سرویس خارجی باشد. در چنین پروژه‌هایی، لازم است درخواست‌های ارسال‌شده به API به‌صورت امن احراز هویت شوند.

Laravel برای پیاده‌سازی این قابلیت، ابزارهای مختلفی ارائه می‌دهد. یکی از مهم‌ترین آن‌ها Laravel Sanctum است؛ ابزاری که امکان احراز هویت API با توکن و همچنین احراز هویت برنامه‌های تک‌صفحه‌ای (SPA) را فراهم می‌کند.

در این مقاله یاد می‌گیریم Laravel Sanctum چیست، چگونه آن را نصب و پیکربندی کنیم، چطور برای کاربران توکن بسازیم، چگونه Routeهای API را محافظت کنیم و چه تفاوتی بین احراز هویت مبتنی بر توکن و احراز هویت SPA وجود دارد.

Laravel Sanctum چیست؟

Laravel Sanctum یک ابزار رسمی اکوسیستم Laravel برای احراز هویت کاربران و کلاینت‌ها در برخی سناریوهای API و SPA است.

فرض کنید یک فروشگاه اینترنتی با Laravel ساخته‌اید و علاوه بر وب‌سایت، یک اپلیکیشن موبایل نیز دارید. اپلیکیشن باید بتواند با API سایت ارتباط برقرار کند؛ برای مثال، اطلاعات حساب کاربر را دریافت کند، سفارش‌های او را نمایش دهد یا درخواست ثبت سفارش ارسال کند.

سرور باید مطمئن شود درخواست از یک کاربر معتبر ارسال شده است. Sanctum می‌تواند در این فرآیند کمک کند.

مهم‌ترین کاربردهای Laravel Sanctum عبارت‌اند از:

  • احراز هویت API با توکن
  • صدور توکن برای کاربران یا کلاینت‌های مورداعتماد
  • تعیین مجوزهای مرتبط با توکن
  • لغو توکن‌های صادرشده
  • احراز هویت SPAهای مورداعتماد با استفاده از Cookie و Session
  • محافظت از Routeهای API در برابر درخواست‌های احراز هویت‌نشده

Sanctum برای بسیاری از پروژه‌ها راهکار ساده و مناسبی است؛ اما انتخاب روش احراز هویت باید بر اساس معماری برنامه، نوع کلاینت و نیازهای امنیتی انجام شود.

Laravel Sanctum چه تفاوتی با Authentication معمولی دارد؟

در یک وب‌سایت معمولی، Laravel اغلب از Session و Cookie برای نگهداری وضعیت ورود کاربر استفاده می‌کند. پس از ورود موفق، مرورگر اطلاعات نشست را در درخواست‌های بعدی ارسال می‌کند و سرور وضعیت احراز هویت را بررسی می‌کند.

اما در بسیاری از APIها، کلاینتی مانند اپلیکیشن موبایل باید اعتبارنامه‌ای را در درخواست‌های خود ارسال کند. یکی از روش‌های رایج، استفاده از توکن است.

Sanctum از هر دو سناریوی مهم پشتیبانی می‌کند:

روشکاربرد متداولسازوکار اصلی
احراز هویت Session-basedوب‌سایت و SPA مورداعتمادCookie و Session
احراز هویت Token-basedاپلیکیشن موبایل یا کلاینت APIتوکن ارسال‌شده در درخواست

این دو روش یکسان نیستند و نباید بدون توجه به معماری پروژه با هم ترکیب شوند.

برای مثال، اگر یک SPA و API تحت دامنه‌ها و تنظیمات مناسب قرار دارند، احراز هویت مبتنی بر Cookie و Session می‌تواند انتخاب خوبی باشد. اما برای یک اپلیکیشن موبایل که به‌صورت مستقل به API متصل می‌شود، ممکن است احراز هویت مبتنی بر توکن مناسب‌تر باشد.

پیش‌نیازهای استفاده از Laravel Sanctum

قبل از نصب Sanctum، بهتر است با چند مفهوم آشنا باشید:

  • Route و Controller در Laravel
  • مدل User و کار با پایگاه داده
  • Middleware
  • Authentication و Authorization
  • درخواست‌های HTTP و API
  • مفاهیم پایه Session و Cookie

اگر این مفاهیم را قبلاً مطالعه کرده باشید، پیاده‌سازی Sanctum ساده‌تر خواهد بود.

نصب Laravel Sanctum

در نسخه‌های جدید Laravel، Sanctum معمولاً از طریق Composer نصب می‌شود و دستور Artisan می‌تواند تنظیمات موردنیاز آن را منتشر کند.

ابتدا وارد پوشه پروژه شوید:


cd /path/to/your-laravel-project

سپس دستور نصب را اجرا کنید:


php artisan install:api

در نسخه‌هایی که این دستور در دسترس نیست یا پروژه از ساختار دیگری استفاده می‌کند، می‌توانید Sanctum را مستقیماً از طریق Composer نصب کنید:


composer require laravel/sanctum

در این حالت، مراحل انتشار تنظیمات و اجرای Migration را مطابق مستندات نسخه نصب‌شده انجام دهید.

بعد از نصب، وضعیت فایل‌های پیکربندی و Migrationها را بررسی کنید. Sanctum برای ذخیره توکن‌های API از جدولی با نام personal_access_tokens استفاده می‌کند.

اگر Migration مربوط به این جدول در پروژه شما وجود دارد، آن را دوباره ایجاد نکنید. در غیر این صورت، Migrationهای منتشرشده را اجرا کنید:


php artisan migrate

نکته: پیش از اجرای Migration در محیط Production، از پایگاه داده نسخه پشتیبان تهیه کنید و تغییرات را بررسی کنید.

پیکربندی مدل User برای Laravel Sanctum

برای صدور توکن API، مدل کاربر باید از قابلیت مربوط به توکن‌های Sanctum استفاده کند.

فایل مدل User معمولاً در مسیر زیر قرار دارد:

app/Models/User.php

در این مدل، Trait با نام HasApiTokens را اضافه کنید:


<?php



namespace App\Models;



use Illuminate\Foundation\Auth\User as Authenticatable;

use Laravel\Sanctum\HasApiTokens;



class User extends Authenticatable

{

    use HasApiTokens;

}

اگر مدل User شما از قبل Traitهای دیگری دارد، آن‌ها را حذف نکنید؛ فقط HasApiTokens را در کنار Traitهای موجود اضافه کنید.

این Trait متدهایی را در اختیار مدل قرار می‌دهد که برای ساخت و مدیریت توکن‌های API کاربرد دارند.

ساخت اولین API محافظت‌شده با Sanctum

پس از نصب و پیکربندی Sanctum، می‌توانیم یک Route بسازیم که فقط کاربران احراز هویت‌شده اجازه دسترسی به آن را داشته باشند.

در فایل routes/api.php بنویسید:


use Illuminate\Http\Request;

use Illuminate\Support\Facades\Route;



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

    return $request->user();

});

در این مثال، Middleware با نام auth:sanctum بررسی می‌کند که درخواست با یکی از روش‌های پشتیبانی‌شده توسط Sanctum احراز هویت شده باشد.

اگر احراز هویت موفق باشد، اطلاعات کاربر فعلی برگردانده می‌شود. در غیر این صورت، درخواست به‌عنوان درخواست احراز هویت‌نشده مدیریت خواهد شد.

اگر API شما از Routeهای محافظت‌شده زیادی استفاده می‌کند، می‌توانید Middleware را برای گروهی از Routeها نیز تعریف کنید.


Route::middleware('auth:sanctum')->group(function () {

    Route::get('/profile', function (Request $request) {

        return $request->user();

    });



    Route::get('/orders', function (Request $request) {

        return $request->user()->orders;

    });

});

این نمونه فرض می‌کند مدل User دارای رابطه orders است. اگر چنین رابطه‌ای در پروژه تعریف نشده باشد، باید آن را متناسب با ساختار دیتابیس ایجاد کنید.

همچنین توجه داشته باشید که auth:sanctum هویت درخواست را بررسی می‌کند؛ اما به‌تنهایی تضمین نمی‌کند کاربر اجازه انجام تمام عملیات یا مشاهده تمام منابع را دارد. برای این موضوع باید Authorization و Policyهای مناسب نیز استفاده شوند.

ساخت API Token در Laravel Sanctum

یکی از قابلیت‌های مهم Sanctum، ساخت توکن برای کاربران است.

برای مثال، فرض کنید کاربری در یک فرآیند معتبر وارد سیستم شده است و می‌خواهید برای اپلیکیشن موبایل او یک توکن ایجاد کنید.

می‌توانید از متد createToken() استفاده کنید:


$token = $user->createToken('mobile-app');



$plainTextToken = $token->plainTextToken;

در این مثال، توکنی با نام mobile-app ساخته می‌شود و مقدار قابل استفاده آن از طریق plainTextToken در دسترس قرار می‌گیرد.

نام توکن صرفاً یک برچسب برای شناسایی آن است. می‌توانید از نام‌هایی مانند android-app، ios-app یا external-client استفاده کنید.

چرا باید توکن را با دقت نگهداری کنیم؟

مقدار متنی توکن، یک اعتبارنامه حساس است. هر شخصی که به توکن معتبر دسترسی داشته باشد، ممکن است بتواند به‌عنوان دارنده آن به API درخواست ارسال کند.

بنابراین:

  • توکن را در پاسخ مناسب و از طریق HTTPS به کلاینت تحویل دهید.
  • مقدار توکن را در Logها ثبت نکنید.
  • توکن را در URL قرار ندهید.
  • از ذخیره ناامن توکن در کلاینت خودداری کنید.
  • در صورت گم‌شدن یا افشای توکن، امکان لغو آن را داشته باشید.

Sanctum مقدار متنی توکن را هنگام ایجاد در اختیار شما قرار می‌دهد؛ بنابراین کلاینت باید آن را به‌صورت امن ذخیره کند. پایگاه داده Sanctum برای بررسی توکن از ساختار مخصوص خود استفاده می‌کند و نباید انتظار داشته باشید مقدار متنی اولیه توکن را بتوانید بعداً از جدول توکن‌ها بازیابی کنید.

ارسال توکن در درخواست API

پس از دریافت توکن، کلاینت باید آن را در درخواست‌های محافظت‌شده ارسال کند.

روش متداول، استفاده از هدر Authorization با نوع Bearer است.

برای مثال:


GET /api/user HTTP/1.1

Host: example.com

Accept: application/json

Authorization: Bearer YOUR_API_TOKEN

در این نمونه، مقدار YOUR_API_TOKEN فقط یک مقدار نمایشی است و باید با توکن واقعی صادرشده جایگزین شود.

هنگامی که درخواست به Laravel می‌رسد، Middleware مربوط به auth:sanctum توکن را بررسی می‌کند. اگر توکن معتبر باشد، کاربر مرتبط با آن در دسترس درخواست قرار می‌گیرد.

آزمایش درخواست با cURL

برای آزمایش می‌توانید از دستور زیر استفاده کنید:


curl -X GET "https://example.com/api/user" \

  -H "Accept: application/json" \

  -H "Authorization: Bearer YOUR_API_TOKEN"

آدرس دامنه و مقدار توکن را با اطلاعات واقعی محیط خود جایگزین کنید.

در محیط توسعه، می‌توانید همین درخواست را با ابزارهایی مانند Postman نیز ارسال کنید.

ساخت یک Endpoint برای صدور توکن

برای درک بهتر فرآیند، فرض کنیم می‌خواهیم پس از بررسی اطلاعات ورود، یک توکن API ایجاد کنیم.

نمونه زیر یک الگوی ساده برای ساخت Endpoint ورود است. این نمونه باید در پروژه واقعی با محدودیت تلاش ورود، سیاست‌های امنیتی، اعتبارسنجی کامل و مدیریت مناسب خطا تکمیل شود.


<?php



namespace App\Http\Controllers\Api;



use App\Http\Controllers\Controller;

use Illuminate\Http\Request;

use Illuminate\Support\Facades\Auth;



class TokenController extends Controller

{

    public function store(Request $request)

    {

        $credentials = $request->validate([

            'email' => ['required', 'email'],

            'password' => ['required', 'string'],

            'device_name' => ['required', 'string', 'max:100'],

        ]);



        if (! Auth::attempt([

            'email' => $credentials['email'],

            'password' => $credentials['password'],

        ])) {

            return response()->json([

                'message' => 'اطلاعات ورود معتبر نیست.',

            ], 422);

        }



        $user = Auth::user();



        $token = $user->createToken(

            $credentials['device_name']

        );



        return response()->json([

            'token' => $token->plainTextToken,

            'token_type' => 'Bearer',

        ]);

    }

}

در این مثال، پس از تأیید اطلاعات ورود، برای کاربر یک توکن ساخته می‌شود.

این کد صرفاً نمونه آموزشی است. در یک پروژه واقعی، باید مشخص کنید از کدام Guard برای اعتبارسنجی اطلاعات ورود استفاده می‌کنید، چگونه تلاش‌های ناموفق را محدود می‌کنید و چه سیاستی برای صدور توکن دارید.

همچنین نباید فرض کنید هر Routeای که توکن صادر می‌کند، خودبه‌خود امن است. Endpoint صدور توکن باید به‌صورت مستقل در برابر تلاش‌های مکرر، سوءاستفاده و افشای اطلاعات محافظت شود.

لغو توکن در Laravel Sanctum

در برخی شرایط لازم است یک توکن باطل شود؛ برای مثال، کاربر از حساب خود خارج شده یا دستگاهی را که قبلاً به حساب متصل بوده دیگر در اختیار ندارد.

برای لغو توکن فعلی کاربر می‌توانید از کد زیر استفاده کنید:


$request->user()->currentAccessToken()->delete();

این کد توکن فعلی را حذف می‌کند، مشروط بر اینکه درخواست واقعاً با یک توکن شخصی Sanctum احراز هویت شده باشد.

در سناریوهایی که از احراز هویت مبتنی بر Session استفاده می‌شود، currentAccessToken() لزوماً یک Personal Access Token قابل حذف نیست. بنابراین، پیش از اجرای عملیات لغو توکن باید روش احراز هویت درخواست را در نظر بگیرید.

لغو تمام توکن‌های کاربر

اگر کاربر بخواهد تمام توکن‌های صادرشده خود را باطل کند، می‌توانید از رابطه توکن‌ها استفاده کنید:


$user->tokens()->delete();

این عملیات تمام توکن‌های مرتبط با آن کاربر را حذف می‌کند. پس از آن، کلاینت‌هایی که به این توکن‌ها وابسته هستند باید دوباره فرآیند احراز هویت را انجام دهند.

این قابلیت برای سناریوهایی مانند خروج از تمام دستگاه‌ها یا واکنش به افشای اعتبارنامه کاربرد دارد.

مجوزهای توکن در Laravel Sanctum

Sanctum امکان تعریف مجوزهای مرتبط با توکن را نیز فراهم می‌کند.

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

هنگام ایجاد توکن می‌توانید مجوزها را مشخص کنید:


$token = $user->createToken(

    'report-client',

    ['reports:read']

);

در این مثال، توکن با مجوز reports:read ساخته می‌شود.

برای بررسی مجوز توکن می‌توانید از متد tokenCan() استفاده کنید:


if ($request->user()->tokenCan('reports:read')) {

    // توکن دارای مجوز خواندن گزارش‌ها است

}

همچنین می‌توانید در Route از Middleware مربوط به بررسی توانایی توکن استفاده کنید:


Route::get('/reports', function () {

    return response()->json([

        'message' => 'گزارش‌ها',

    ]);

})->middleware([

    'auth:sanctum',

    'abilities:reports:read',

]);

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

نکته امنیتی مهم این است که مجوز توکن و مجوز کاربر دو مفهوم متفاوت‌اند. وجود یک Ability به معنای مجاز بودن دسترسی به هر منبعی نیست. اگر کاربر فقط باید به گزارش‌های خودش دسترسی داشته باشد، همچنان باید مالکیت گزارش یا مجوزهای مربوط به آن را با Policy یا منطق مناسب بررسی کنید.

احراز هویت SPA با Laravel Sanctum

Sanctum تنها برای توکن‌های API طراحی نشده است؛ بلکه از احراز هویت SPAهای مورداعتماد نیز پشتیبانی می‌کند.

فرض کنید Backend شما با Laravel ساخته شده و Frontend از Vue یا React استفاده می‌کند. اگر Frontend و Backend در دامنه‌ها و تنظیمات سازگار قرار داشته باشند، می‌توانید از روش مبتنی بر Cookie و Session استفاده کنید.

در این روش، معمولاً نیازی نیست برای هر درخواست SPA یک Personal Access Token ایجاد کنید. به‌جای آن، برنامه از سازوکار نشست وب و Cookieهای امن برای نگهداری وضعیت احراز هویت استفاده می‌کند.

مراحل کلی احراز هویت SPA

فرآیند کلی به این شکل است:

  1. کلاینت مورداعتماد ابتدا Endpoint مربوط به CSRF Cookie را فراخوانی می‌کند.
  2. درخواست ورود را با اطلاعات کاربر ارسال می‌کند.
  3. Laravel پس از ورود موفق، نشست احراز هویت را مدیریت می‌کند.
  4. درخواست‌های بعدی با Cookieهای لازم ارسال می‌شوند.
  5. Routeهای محافظت‌شده، کاربر را از طریق Middleware مناسب بررسی می‌کنند.

در بسیاری از تنظیمات Sanctum، Endpoint مربوط به CSRF Cookie به شکل /sanctum/csrf-cookie در دسترس است.

برای مثال، یک درخواست اولیه می‌تواند به این شکل باشد:


GET /sanctum/csrf-cookie

پس از دریافت Cookieهای موردنیاز، کلاینت باید درخواست ورود را مطابق پیکربندی Laravel و الزامات CSRF ارسال کند.

نکات مهم برای SPA

برای راه‌اندازی صحیح این روش، باید مواردی مانند دامنه‌های مورداعتماد Sanctum، تنظیمات Session، دامنه Cookie، CORS، HTTPS و ارسال Cookie از سمت کلاینت را هماهنگ کنید.

برای مثال، ممکن است لازم باشد کلاینت در درخواست‌های خود ارسال اعتبارنامه‌ها را فعال کند. شیوه دقیق تنظیم این گزینه به کتابخانه HTTP مورد استفاده و معماری برنامه بستگی دارد.

این روش با ارسال Bearer Token یکسان نیست. پیش از پیاده‌سازی، مشخص کنید که پروژه شما به احراز هویت SPA مبتنی بر Session نیاز دارد یا به توکن‌های API.

تفاوت Laravel Sanctum و Laravel Passport

Sanctum و Passport هر دو در اکوسیستم Laravel برای سناریوهای احراز هویت کاربرد دارند، اما هدف و پیچیدگی آن‌ها متفاوت است.

ویژگیLaravel SanctumLaravel Passport
کاربرد اصلیاحراز هویت ساده API و SPAپیاده‌سازی کامل‌تر OAuth2
توکن APIپشتیبانی می‌کندپشتیبانی می‌کند
احراز هویت SPAپشتیبانی می‌کندبرای این نیاز معمولاً Sanctum ساده‌تر است
پیچیدگی پیکربندیمعمولاً کمترمعمولاً بیشتر
مناسب برایبسیاری از APIها و کلاینت‌های تحت کنترل شماسناریوهای نیازمند قابلیت‌های OAuth2

اگر اپلیکیشن موبایل یا کلاینت مورداعتماد شما فقط به یک توکن برای دسترسی به API نیاز دارد، Sanctum ممکن است انتخاب ساده‌تری باشد.

اما اگر پروژه به قابلیت‌های کامل OAuth2، مانند جریان‌های مشخص صدور مجوز برای کلاینت‌های مختلف، نیاز داشته باشد، باید Passport یا راهکار مناسب OAuth2 را بررسی کنید.

انتخاب نهایی به نیازهای واقعی پروژه بستگی دارد؛ استفاده از ابزار پیچیده‌تر همیشه به معنی امنیت بیشتر نیست.

نکات امنیتی مهم در Laravel Sanctum

استفاده از Sanctum بسیاری از جزئیات احراز هویت را ساده می‌کند، اما همچنان باید اصول امنیتی را رعایت کنید.

۱. فقط از HTTPS استفاده کنید

توکن‌ها و اطلاعات احراز هویت باید از طریق ارتباط امن منتقل شوند. در محیط Production، HTTPS را به‌درستی پیکربندی کنید.

۲. توکن‌ها را در Logها ذخیره نکنید

توکن API یک اعتبارنامه حساس است. از ثبت آن در Logها، گزارش خطاها یا ابزارهای تحلیل خودداری کنید.

۳. برای توکن‌ها سیاست لغو مشخص داشته باشید

اگر دستگاهی گم شود یا توکنی افشا شود، باید بتوانید دسترسی آن را لغو کنید. برای کاربران و کلاینت‌ها سیاست مشخصی جهت مدیریت توکن‌ها تعریف کنید.

۴. مجوزهای لازم را محدود کنید

به هر توکن فقط مجوزهایی را بدهید که برای وظیفه موردنظر لازم است. از صدور توکن‌هایی با دسترسی گسترده و غیرضروری خودداری کنید.

۵. احراز هویت را با Authorization اشتباه نگیرید

توکن معتبر فقط هویت یا اعتبار درخواست را در چارچوب روش احراز هویت مشخص می‌کند. مجوز مشاهده، ویرایش یا حذف هر منبع باید جداگانه بررسی شود.

۶. از Rate Limiting استفاده کنید

Endpointهای ورود و صدور توکن باید در برابر تلاش‌های مکرر و سوءاستفاده محافظت شوند. محدودیت نرخ درخواست‌ها را متناسب با حساسیت هر مسیر طراحی کنید.

۷. تنظیمات Cookie و Session را در SPA جدی بگیرید

در روش مبتنی بر Cookie، تنظیمات دامنه، CORS، CSRF و Cookieهای امن اهمیت زیادی دارند. پیکربندی اشتباه می‌تواند باعث خطاهای ورود یا کاهش امنیت شود.

۸. از ذخیره‌سازی ناامن توکن در کلاینت خودداری کنید

محل نگهداری توکن باید با پلتفرم کلاینت و مدل تهدید آن سازگار باشد. در اپلیکیشن‌های موبایل از سازوکار امن ذخیره‌سازی سیستم‌عامل استفاده کنید و در برنامه‌های مرورگری، خطرات ذخیره‌سازی اعتبارنامه‌ها را به‌دقت ارزیابی کنید.

خطاهای رایج هنگام کار با Laravel Sanctum

خطای 401 هنگام فراخوانی API

اگر درخواست شما با پاسخ 401 مواجه می‌شود، ابتدا بررسی کنید که توکن به‌درستی صادر و ارسال شده باشد. هدر Authorization باید قالب صحیح Bearer داشته باشد.

همچنین Route باید Middleware مناسب را داشته باشد و تنظیمات Guard و مدل کاربر درست باشند.

خطای مربوط به جدول personal_access_tokens

اگر جدول توکن‌ها وجود ندارد، Migrationهای Sanctum و وضعیت پایگاه داده را بررسی کنید. ممکن است Migrationها اجرا نشده باشند یا پروژه از ساختار نصب متفاوتی استفاده کند.

خطای CSRF در احراز هویت SPA

در روش مبتنی بر Cookie، بررسی کنید که کلاینت ابتدا CSRF Cookie را دریافت کند و سپس درخواست ورود را با اطلاعات لازم ارسال کند. تنظیمات دامنه، CORS، Session و Cookie نیز باید با یکدیگر سازگار باشند.

کاربر وارد شده است اما به یک منبع دسترسی ندارد

ممکن است احراز هویت موفق باشد، اما Policy یا Gate مجوز عملیات را رد کند. در این حالت باید قانون Authorization را بررسی کنید؛ افزایش دسترسی توکن لزوماً راهکار درستی نیست.

توکن پس از خروج همچنان کار می‌کند

بررسی کنید که عملیات خروج واقعاً توکن مربوطه را لغو کرده باشد. در صورت استفاده از Session-based Authentication، منطق خروج با حذف Personal Access Token متفاوت است.

پرسش‌های متداول درباره Laravel Sanctum

Laravel Sanctum چیست؟

Laravel Sanctum ابزاری برای احراز هویت API و SPA است که از Personal Access Token و احراز هویت مبتنی بر Cookie و Session در سناریوهای پشتیبانی‌شده استفاده می‌کند.

آیا Laravel Sanctum برای اپلیکیشن موبایل مناسب است؟

بله، Sanctum می‌تواند برای احراز هویت مبتنی بر توکن در اپلیکیشن‌های موبایل مناسب باشد. نحوه صدور، ذخیره‌سازی و لغو توکن باید با نیازهای امنیتی اپلیکیشن هماهنگ باشد.

چگونه در Laravel Sanctum توکن بسازیم؟

با استفاده از متد createToken() روی مدل کاربر می‌توانید توکن بسازید. مقدار قابل ارسال به کلاینت از طریق plainTextToken در دسترس قرار می‌گیرد.

چگونه توکن Sanctum را لغو کنیم؟

برای حذف توکن فعلی، در سناریوی Personal Access Token می‌توانید از currentAccessToken()->delete() استفاده کنید. برای حذف همه توکن‌های یک کاربر نیز می‌توان از رابطه tokens() استفاده کرد.

آیا Sanctum از احراز هویت SPA پشتیبانی می‌کند؟

بله. Sanctum برای SPAهای مورداعتماد امکان احراز هویت مبتنی بر Cookie و Session را فراهم می‌کند. این روش به تنظیم درست دامنه‌ها، Cookieها، CSRF و CORS نیاز دارد.

تفاوت Sanctum و Passport چیست؟

Sanctum برای بسیاری از سناریوهای API و SPA راهکاری ساده‌تر ارائه می‌دهد؛ Passport برای پروژه‌هایی مناسب است که به قابلیت‌های کامل‌تر OAuth2 نیاز دارند.

آیا داشتن توکن معتبر برای دسترسی به تمام API کافی است؟

خیر. توکن معتبر به معنای داشتن مجوز برای تمام عملیات نیست. باید مجوزها و مالکیت منابع را نیز با ابزارهایی مانند Gate و Policy بررسی کنید.

جمع‌بندی

Laravel Sanctum یکی از ابزارهای کاربردی برای پیاده‌سازی احراز هویت در پروژه‌های Laravel است. با استفاده از آن می‌توان برای کاربران توکن ایجاد کرد، Routeهای API را محافظت کرد، دسترسی توکن‌ها را محدود کرد و در سناریوهای مناسب، احراز هویت SPA را با Cookie و Session پیاده‌سازی کرد.

در این مقاله با نصب Sanctum، تنظیم مدل User، استفاده از Middleware auth:sanctum، ساخت و لغو توکن، مجوزهای توکن و تفاوت احراز هویت API با SPA آشنا شدیم.

برای انتخاب روش مناسب، ابتدا معماری پروژه را مشخص کنید. اگر به یک API ساده برای اپلیکیشن موبایل یا کلاینت مورداعتماد نیاز دارید، Sanctum می‌تواند انتخاب مناسبی باشد. اگر به جریان‌های کامل OAuth2 نیاز دارید، بهتر است گزینه‌های دیگر مانند Passport را نیز بررسی کنید.

نظرات (0)

نظرات پس از تأیید مدیر نمایش داده می‌شوند

هنوز نظری ثبت نشده است؛ اولین نفر باشید!

مقالات مرتبط

ساخت CMS با Laravel 12؛ آموزش ساخت سیستم مدیریت محتوا از صفر

ساخت CMS با Laravel 12؛ آموزش ساخت سیستم مدیریت محتوا از صفر

۲۴ دقیقه
ساخت فروشگاه اینترنتی با Laravel 12؛ آموزش پروژه‌محور از صفر تا طراحی هسته فروشگاه

ساخت فروشگاه اینترنتی با Laravel 12؛ آموزش پروژه‌محور از صفر تا طراحی هسته فروشگاه

۲۲ دقیقه
ساخت Marketplace با Laravel؛ آموزش طراحی فروشگاه چندفروشندگی

ساخت Marketplace با Laravel؛ آموزش طراحی فروشگاه چندفروشندگی

۲۲ دقیقه
مدیریت Queueهای سنگین در Laravel؛ آموزش پردازش کارهای طولانی

مدیریت Queueهای سنگین در Laravel؛ آموزش پردازش کارهای طولانی

۲۲ دقیقه