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

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

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

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

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

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

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

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

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

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

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

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

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

Authentication Convergence

OTP، email/password و OAuth باید متفاوت verify شوند — بعد یک مسیر مشترک برای provision و session establishment در دامنهٔ Identity داشته باشند.
Mostafa Effati3 دقیقه مطالعهsoftware-architecture

چند روش Auth، یک مسیر Session

تیم محصول روش‌های login جمع می‌کند: phone OTP، email/password، Google، شاید بعداً Apple. هر روش controller خودش، copy-paste «create user» خودش، و quirk Session خودش را می‌خواهد.

این‌طور سه تعریف کمی‌متفاوت از «logged in» می‌گیرید.

قانون معماری در این Identity BC ساده است:

چه چیزی مخصوص روش می‌ماند

روشدغدغهٔ verification
Phone OTPکد کوتاه‌عمر در cache، rate limit، search token تماس
Email + passwordقوانین strength، verify با scrypt، شمارندهٔ lockout
OAuthID token / JWKS، audience، issuer؛ access token مربوط به provider را بی‌دلیل نگه ندار
Password resetReset session مات در cache؛ پاسخ همیشه ایمن (بدون email enumeration)

این‌ها مال handler و adapterند — نه Aggregate مربوط به Session.

چه چیزی باید مشترک باشد

بعد از verify موفق:

  1. Provision — ساخت User Account + Contact برای هویت اول‌بار (یا link OAuth به email contact verified موجود)
  2. Establish — ساخت User Account Session + refresh family روی Device Session فعلی
  3. Events — registered در برابر authentication successful / failed

کاربر برگشتی create را رد می‌کند و باز همان مسیر establish را می‌زند. Subject جدید OAuth ممکن است به‌جای create، به email contact verified موجود link شود.

لایه‌بندی که راز را از UI دور نگه می‌دارد

دغدغهمال کجاست
صفحهٔ login، UX ریدایرکت OAuthFrontend
Client secret مربوط به providerهرگز در browser
Verify credential، hashing، JWKSIdentity Service
صدور Session + refreshIdentity Service
قوانین Account linkingIdentity Service

Frontend مدرک را می‌فرستد (کد OTP، password، ID token). Identity تصمیم می‌گیرد کی هستید و session token برمی‌گرداند. Cookie و refresh در Edge delivery است — نه منبع حقیقت دوم.

گسترش بدون جراحی Schema

Providerهای OAuth یک adapter registryاند: provider جدید = verifier جدید + مقدار enum. نوع Contact از قبل Aggregate است؛ پس email در برابر phone جنگ ستون نیست.

Password credential به email contact آویزان است (۱:۱)، با فیلدهای failed-attempt و lockout. OAuth identity به Account آویزان است با search token از نوع HMAC روی sub — subject خام کلید query شفاف نیست.

چرا Convergence مهم است

بدون مسیر establish مشترک دیر یا زود:

  • کاربران OTP با TTL Session متفاوت از password
  • «Login» OAuth که device binding را فراموش می‌کند
  • Reset که Sessionهایی را که فکر می‌کردید revoke کرده‌اید باطل نمی‌کند

با convergence، هر Authentication موفق یک معنی دارد: User Account Session روی Device شناخته‌شده، با refresh family، و eventهایی که بقیهٔ پلتفرم می‌تواند به آن‌ها اعتماد کند.

بعد

آدم‌ها و Accountها تمام دنیا نیستند. Organization، Employee و Location در همان bounded context موجودیت‌اند.

ادامه: Organizations و Location.

اسناد مرتبط

منوی دستور

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

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