امنیت لایهلایه است (Defense in Depth) و از روز اول در معماری مینشیند، نه بهعنوان چسب زخمِ آخر. چهار پرسش: کی هستی؟ چه حقی داری؟ داده چطور محافظت میشود؟ حمله چطور مهار میشود؟
AuthN vs AuthZ
احراز هویت: «کی هستی؟» (رمز، OTP ،Passkey). سپس مجوز: «چه حقی داری؟» (نقشها RBAC، یا سیاستها).
Session vs JWT
Session: شناسه در کوکی، state سمت سرور — ابطالِ فوری آسان. JWT: توکن امضاشده خودحمل — بدون state سرور، عالی بین سرویسها؛ ولی ابطال قبل از انقضا سخت → عمر کوتاه + Refresh Token.
OAuth 2.0 / OIDC
واگذاری امن دسترسی: «ورود با گوگل» بدون دیدن رمزِ کاربر؛ استاندارد ارتباط اپهای ثالث.
Hashing رمز
رمز هرگز ذخیره نمیشود؛ hash کند و نمکدار (bcrypt/argon2) — نه MD5/SHA1.
حداقلهای غیرقابل مذاکره
- TLS همهجا — حتی داخل شبکه (Zero Trust: به شبکه داخلی هم اعتماد نکن).
- رمزنگاری در سکون (at rest) برای داده حساس + مدیریت کلید جدا (KMS).
- Least Privilege: هر سرویس/انسان فقط حداقلِ دسترسی لازم؛ secret ها در Vault، نه در کد و env عمومی.
- ورودی کاربر = دشمن: پارامتر باندشده علیه SQL Injection ،escape علیه XSS ،CSRF token، اعتبارسنجی سمت سرور.
- Rate Limit روی login و OTP علیه brute-force + قفل تدریجی.
به زبان ساده
امنیت یعنی در هر لایه بررسی کنیم چه کسی است، چه مجوزی دارد و داده چگونه محافظت میشود.
مثال واقعی
کاربر لاگینشده شاید بتواند سفارش خودش را ببیند، اما سرویس باید جداگانه جلوی دیدن سفارش مشتری دیگر را بگیرد.