🔐 امنیت در NestJS؛ از احراز هویت تا کنترل دسترسی

در دنیای توسعه بک‌اند، امنیت نه یک گزینه، بلکه یک ضرورت است. NestJS با ارائه ابزارها و الگوهای امنیتی پیشرفته، به توسعه‌دهندگان این امکان را می‌دهد که برنامه‌هایی امن، قابل اعتماد و مقیاس‌پذیر بسازند. در این مقاله، سه ستون اصلی امنیت در NestJS را بررسی می‌کنیم: احراز هویت با JWT، محافظت از مسیرها با Guards، و مدیریت نقش‌ها و دسترسی‌ها.

🔐 امنیت در NestJS؛ از احراز هویت تا کنترل دسترسی
🔐 امنیت در NestJS؛ از احراز هویت تا کنترل دسترسی

🔑 احراز هویت با JWT؛ کلید ورود امن کاربران

JWT یا JSON Web Token یکی از رایج‌ترین روش‌های احراز هویت در برنامه‌های مدرن است. NestJS با پشتیبانی کامل از JWT، امکان پیاده‌سازی احراز هویت بدون نیاز به نگهداری session در سرور را فراهم می‌کند.

چگونه کار می‌کند؟

  • کاربر با ارسال اطلاعات ورود (مانند ایمیل و رمز عبور) به سرور، احراز هویت می‌شود.

  • در صورت موفقیت، سرور یک توکن JWT امضا شده تولید می‌کند و به کاربر بازمی‌گرداند.

  • کاربر این توکن را در درخواست‌های بعدی به همراه می‌فرستد (معمولاً در هدر Authorization).

  • سرور با بررسی امضای توکن، اعتبار آن را تأیید می‌کند و اجازه دسترسی می‌دهد.


مزایای استفاده از JWT در NestJS:

  • بدون نیاز به نگهداری session در سرور

  • قابل استفاده در معماری‌های توزیع‌شده و میکروسرویس

  • امکان رمزنگاری و امضای توکن‌ها برای امنیت بیشتر

  • سازگاری کامل با Guards و Role-based Access Control

NestJS با استفاده از بسته‌هایی مانند @nestjs/jwt و passport-jwt، فرآیند احراز هویت را ساده و قابل تنظیم می‌کند.


🛡️ محافظت از مسیرها با Guards؛ دروازه‌بان‌های امنیتی

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

تعریف یک Guard ساده:

Guards با استفاده از Decorator @UseGuards() به مسیرها یا کنترلرها اضافه می‌شوند و با پیاده‌سازی اینترفیس CanActivate عمل می‌کنند.

مثال:

`typescript

@UseGuards(AuthGuard)

@Get('profile')

getProfile(@Request() req) {

return req.user;

}

`

در این مثال، مسیر profile فقط برای کاربران احراز هویت‌شده قابل دسترسی است.


مزایای Guards:

  • جداسازی منطق امنیت از منطق تجاری

  • قابل استفاده در سطح کنترلر یا مسیر خاص

  • امکان ترکیب چند Guard برای شرایط پیچیده‌تر

  • سازگاری با سیستم تزریق وابستگی NestJS

Guards به توسعه‌دهنده این امکان را می‌دهند که امنیت مسیرها را به صورت دقیق و قابل کنترل پیاده‌سازی کند.


🧮 مدیریت نقش‌ها و دسترسی‌ها؛ کنترل دقیق مجوزها

در بسیاری از برنامه‌ها، کاربران دارای نقش‌های مختلفی هستند (مانند مدیر، کاربر عادی، مهمان) و هر نقش مجوزهای خاصی دارد. NestJS با ترکیب Guards و Decoratorهای سفارشی، امکان پیاده‌سازی کنترل دسترسی مبتنی بر نقش را فراهم می‌کند.

پیاده‌سازی Role-based Access Control:

  • تعریف نقش‌ها به صورت Enum یا ثابت

  • افزودن نقش به اطلاعات کاربر در توکن JWT

  • ایجاد Guard برای بررسی نقش کاربر

  • استفاده از Decorator برای مشخص کردن نقش‌های مجاز

مثال:

`typescript

@Roles('admin')

@UseGuards(AuthGuard, RolesGuard)

@Get('admin-panel')

getAdminData() {

return 'Only for admins';

}

`

در این مثال، مسیر admin-panel فقط برای کاربران با نقش admin قابل دسترسی است.


مزایای مدیریت نقش‌ها:

  • افزایش امنیت و کنترل دقیق‌تر دسترسی‌ها

  • قابل توسعه برای سطوح دسترسی پیچیده‌تر

  • سازگاری با معماری ماژولار NestJS

  • امکان استفاده در میکروسرویس‌ها و APIهای عمومی

مدیریت نقش‌ها در NestJS به توسعه‌دهنده این امکان را می‌دهد که برنامه‌ای امن، منعطف، و قابل اعتماد بسازد.


✨ نتیجه‌گیری

امنیت در NestJS نه‌تنها یک قابلیت، بلکه بخشی از DNA این فریم‌ورک است. با استفاده از JWT برای احراز هویت، Guards برای محافظت از مسیرها، و Role-based Access Control برای مدیریت مجوزها، NestJS بستری قدرتمند برای ساخت برنامه‌هایی امن و حرفه‌ای فراهم می‌کند.

اگر به دنبال ساخت بک‌اندی هستی که هم سریع باشه و هم امن، NestJS می‌تونه انتخابی بی‌نظیر باشه.

عضویت در خبرنامه

با عضویت در خبرنامه زودتر از تخفیفها و اخبار و خدمات با خبر شوید

عضویت در خبرنامه