رفتن به محتوای اصلی
مصطفی عفتی

درباره این پلتفرم

دفتر کاری زنده برای تجربه‌های مهندسی

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

همکار دانشجویی

  • خانم زهرا احسانی

    دانشجوی سابق · مشارکت‌کننده در توسعه پلتفرم

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

اینجا چه پیدا می‌کنید

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

با طراحی آگاهانه

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

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

Identity فراتر از Login است

طراحی Identity Service از صفر — چرا Authentication فقط بخش کوچکی از مسئله است.
Mostafa Effati3 دقیقه مطالعهsoftware-architecture

هویت خیلی بیشتر از Login است

چند ماه پیش تصمیم گرفتم یکی از مهم‌ترین سرویس‌های سیستم را از صفر بازطراحی کنم: Identity Service.

اول فکر می‌کردم کار عمدتاً دربارهٔ احراز هویت، JWT، OAuth و access token است.

اشتباه می‌کردم.

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

معمولاً از «هویت» چه می‌فهمیم؟

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

  • Login
  • Registration
  • JWT
  • OAuth
  • Access tokens

این‌ها فقط نوک کوه یخ‌اند:

سؤال‌هایی که طراحی را عوض می‌کنند

بخش سخت وقتی شروع می‌شود که بپرسید:

سؤالچرا جدول تخت users درد می‌کشد
User و Person یکی باشند؟حساب ≠ انسان
Device Session در برابر User Session؟سرقت و multi-device رفتار متفاوت دارند
چرخش refresh token؟Replay attack به token family نیاز دارد
رمزنگاری PII at rest؟Name و Contact دارایی حساس‌اند
Organization و Employee؟آدم‌ها چند نقش دارند
Multiple Citizenship؟ملیت Relationship است نه یک flag
Location به‌عنوان entity؟Address و geo همیشه free-text نیستند

پاسخ به این‌ها فرض‌هایی را که سال‌ها حمل کرده بودم به‌هم زد.

مدل‌سازی واقعیت

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

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

و همهٔ این‌ها بالاخره در اسکیما ظاهر می‌شوند.

ناگهان طراحی سرویس هویت خیلی بیشتر از پیاده‌سازی JWT می‌شود.

ادامهٔ این کتاب

  1. User در برابر Person

    چرا User Account همان انسان نیست.

  2. Contact و Citizenship

    Channelها به‌عنوان Aggregate؛ ملیت به‌عنوان Relationship — نه یک flag ابدی.

  3. Dual Session و Token Family

    اول Device، بعد Account؛ rotation با reuse detection.

  4. Auth، Org و Edge

    Convergence برای OTP / password / OAuth؛ Organization و geo؛ ترتیب cookie در Next.js.

جمع‌بندی

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

معماری دربارهٔ تکنولوژی نیست. معماری دربارهٔ فهم دامنه‌ای است که می‌خواهید مدل کنید.

فریم‌ورک عوض می‌شود. زبان عوض می‌شود. دیتابیس عوض می‌شود. دامنه می‌ماند.

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


نسخهٔ canonical. همچنین در Medium.

اسناد مرتبط

منوی دستور

↑ ↓برای حرکت · Enter برای انتخاب · Esc برای بستن
ناوبری
اقدامات

Esc برای بستن · ⌘K برای باز/بسته کردن