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

احراز هویت با Laravel Sanctum: راهنمای جامع

احراز هویت با Laravel Sanctum: راهنمای جامع

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

مقدمه

در دنیای مدرن توسعه وب، APIها نقش حیاتی ایفا می‌کنند. برنامه‌های تک صفحه‌ای، برنامه‌های موبایل و سایر سرویس‌ها به APIها برای دریافت و ارسال داده‌ها متکی هستند. احراز هویت در این APIها بسیار مهم است تا از دسترسی غیرمجاز به داده‌ها جلوگیری شود. Laravel Sanctum به عنوان یک راه حل ساده و کارآمد برای این منظور ارائه شده است.

چرا Sanctum؟

Sanctum در مقایسه با روش‌های سنتی احراز هویت مانند Session-based authentication، مزایای متعددی دارد:

  • سادگی: Sanctum به راحتی قابل نصب و پیکربندی است.
  • سبک‌وزن: Sanctum سربار کمتری نسبت به روش‌های سنتی دارد.
  • مناسب برای APIها: Sanctum به طور خاص برای احراز هویت APIها طراحی شده است.
  • پشتیبانی از Tokenهای مختلف: Sanctum از Tokenهای شخصی (Personal Access Tokens) و Tokenهای دستگاه (Device Tokens) پشتیبانی می‌کند.
  • امنیت: Sanctum از مکانیزم‌های امنیتی قوی برای محافظت از APIها استفاده می‌کند.

نصب Sanctum

برای نصب Sanctum، ابتدا باید آن را از طریق Composer نصب کنید:

composer require laravel/sanctum

پس از نصب، باید سرویس‌دهنده Sanctum را در فایل config/app.php به آرایه providers اضافه کنید:

LaravelSanctumSanctumServiceProvider::class,

سپس، باید migrationهای لازم را برای ایجاد جداول مربوط به Sanctum اجرا کنید:

php artisan migrate

پیکربندی Sanctum

فایل پیکربندی Sanctum در config/sanctum.php قرار دارد. در این فایل می‌توانید تنظیمات مختلفی را پیکربندی کنید، از جمله:

  • guard: نام guard پیش‌فرض برای احراز هویت.
  • states: آرایه‌ای از stateهای HTTP که Sanctum باید از آنها محافظت کند.
  • expiration: مدت زمان اعتبار Tokenها.

ایجاد Token

Sanctum دو نوع Token اصلی ارائه می‌دهد:

1. Personal Access Tokens

Personal Access Tokens برای احراز هویت کاربران در طولانی مدت استفاده می‌شوند. این Tokenها معمولاً برای برنامه‌هایی که نیاز به دسترسی مداوم به API دارند، مناسب هستند. برای ایجاد یک Personal Access Token، می‌توانید از دستور Artisan زیر استفاده کنید:

php artisan sanctum:token-create [user_id]

این دستور یک Token جدید ایجاد می‌کند و آن را در کنسول نمایش می‌دهد. شما می‌توانید این Token را در درخواست‌های API خود استفاده کنید.

2. Device Tokens

Device Tokens برای احراز هویت دستگاه‌های خاص استفاده می‌شوند. این Tokenها معمولاً برای برنامه‌های موبایل و برنامه‌های دسکتاپ مناسب هستند. برای ایجاد یک Device Token، می‌توانید از متد createToken() در مدل User استفاده کنید:

public function createToken()
{
    return $this->createToken('my-app')->accessToken();
}

این متد یک Device Token جدید ایجاد می‌کند و آن را برمی‌گرداند. شما می‌توانید این Token را در درخواست‌های API خود استفاده کنید.

استفاده از Tokenها در درخواست‌های API

برای استفاده از Tokenها در درخواست‌های API، باید آنها را در هدر Authorization قرار دهید. فرمت هدر Authorization به صورت زیر است:

Authorization: Bearer [token]

به عنوان مثال:

Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vYXBpLmV4YW1wbGUuY29tIiwic3ViIjoxLCJleHAiOjE2OTYwOTYwMDB9.example

محافظت از Routeها

برای محافظت از Routeهای API خود، می‌توانید از middleware auth:sanctum استفاده کنید. این middleware بررسی می‌کند که آیا درخواست دارای یک Token معتبر است یا خیر. اگر درخواست دارای یک Token معتبر نباشد، middleware یک پاسخ 401 Unauthorized برمی‌گرداند.

برای اعمال middleware auth:sanctum به یک Route، می‌توانید آن را به صورت زیر در فایل routes/api.php تعریف کنید:

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

مدیریت Tokenها

Sanctum امکانات مختلفی برای مدیریت Tokenها ارائه می‌دهد:

  • ابطال Tokenها: می‌توانید Tokenها را با استفاده از متد revoke() در مدل User ابطال کنید.
  • محدود کردن Tokenها: می‌توانید Tokenها را به دستگاه‌های خاص محدود کنید.
  • چرخش Tokenها: می‌توانید Tokenها را به طور دوره‌ای تغییر دهید تا امنیت را افزایش دهید.

نکات امنیتی

برای افزایش امنیت APIهای خود با استفاده از Sanctum، نکات زیر را در نظر داشته باشید:

  • استفاده از HTTPS: همیشه از HTTPS برای برقراری ارتباط با API خود استفاده کنید.
  • اعتبارسنجی ورودی‌ها: ورودی‌های API خود را به دقت اعتبارسنجی کنید تا از حملات تزریقی جلوگیری کنید.
  • محدود کردن دسترسی: دسترسی کاربران را به حداقل میزان لازم محدود کنید.
  • چرخش Tokenها: Tokenها را به طور دوره‌ای تغییر دهید.
  • مانیتورینگ: فعالیت‌های API خود را به طور مداوم مانیتور کنید تا از هرگونه فعالیت مشکوک آگاه شوید.

Sanctum و Laravel Passport

Laravel Passport یک چارچوب احراز هویت OAuth2 برای Laravel است. Sanctum و Passport هر دو برای احراز هویت APIها استفاده می‌شوند، اما تفاوت‌های کلیدی بین آنها وجود دارد.

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

نتیجه‌گیری

Laravel Sanctum یک چارچوب احراز هویت قدرتمند و آسان برای استفاده است که به شما امکان می‌دهد به راحتی APIهای خود را احراز هویت کنید. با استفاده از Sanctum، می‌توانید امنیت APIهای خود را افزایش دهید و تجربه کاربری بهتری را برای کاربران خود فراهم کنید. این مقاله یک راهنمای جامع برای شروع کار با Sanctum ارائه داد. با مطالعه این مقاله و آزمایش با Sanctum، می‌توانید به راحتی آن را در پروژه‌های PHP خود پیاده‌سازی کنید.