🔐 چرا شرکتهای بزرگ یک Identity Provider جداگانه میسازند؟
اوایل پروژه همه چیز ساده است.
کاربر لاگین میکند، JWT میگیرد و تمام.
اما وقتی تعداد سرویسها بیشتر میشود، ناگهان هر سرویس شروع میکند به مدیریت کاربران، نقشها، دسترسیها، Refresh Tokenها و Social Loginها.
همینجاست که مفهوم Identity Provider (IdP) وارد میشود.
به جای اینکه هر سرویس خودش مسئول احراز هویت باشد، یک سرویس مرکزی فقط روی Authentication و Authorization تمرکز میکند.
🏗 معماری سنتی
User
↓
Service A
↓
Database
User
↓
Service B
↓
Database
هر سرویس منطق احراز هویت خودش را دارد.
🏗 معماری با Identity Provider
User
↓
Identity Provider
↓
Access Token
↓
┌─────────┼─────────┐
↓ ↓ ↓
Service A Service B Service C
تمام سرویسها فقط اعتبار Token را بررسی میکنند و دیگر درگیر فرآیند Login نیستند.
✅ مزایا
1️⃣ Single Sign-On (SSO)
کاربر یک بار وارد میشود و به همه سیستمها دسترسی پیدا میکند.
2️⃣ تمرکز روی امنیت
تمام منطق امنیتی در یک نقطه قرار میگیرد:
• Password Policy
• MFA
• OAuth
• OpenID Connect
• Account Lockout
• Device Management
3️⃣ کاهش کد تکراری
دیگر لازم نیست هر سرویس:
• Login Endpoint
• Refresh Token Logic
• Password Reset
• Email Verification
را جداگانه پیادهسازی کند.
4️⃣ توسعهپذیری بیشتر
اضافه کردن Google Login، GitHub Login یا Azure AD فقط در IdP انجام میشود.
تمام سرویسها به صورت خودکار از آن بهره میبرند.
5️⃣ مدیریت متمرکز دسترسیها
ءRoleها، Permissionها و Claimها در یک نقطه نگهداری میشوند.
❌ معایب
1️⃣ Single Point Of Failure
اگر IdP از دسترس خارج شود، ورود کاربران مختل میشود.
2️⃣ پیچیدگی بیشتر
دیگر با یک پروژه ساده طرف نیستید.OAuth2، OIDC، Token Exchange و Security Flowها وارد سیستم میشوند.
3️⃣ نیاز به مانیتورینگ قوی
ءIdentity Provider یکی از حساسترین سرویسهای سازمان خواهد شد.
4️⃣ چالش Revocation
حذف دسترسی کاربران در معماری JWT توزیعشده همیشه ساده نیست.
🚀 Flow اصولی پیادهسازی
مرحله 1️⃣
کاربر درخواست Login ارسال میکند.
POST /connect/token
مرحله 2️⃣
ءIdentity Provider اعتبار کاربر را بررسی میکند.
مرحله 3️⃣
ءAccess Token و Refresh Token صادر میشود.
Access Token
Refresh Token
مرحله 4️⃣
ءClient توکن را به سرویسها ارسال میکند.
Authorization: Bearer xxx
مرحله 5️⃣
هر سرویس فقط Signature و Claims را اعتبارسنجی میکند.
مرحله 6️⃣
در صورت انقضای Access Token، از Refresh Token برای دریافت Token جدید استفاده میشود.
📋 نکاتی که حتماً باید رعایت شوند
🔸 ءAccess Token کوتاهعمر باشد
(۵ تا ۱۵ دقیقه)
🔸 ءRefresh Token قابلیت Rotation داشته باشد
🔸 ءJWT Secret یا Private Key به صورت امن نگهداری شود
🔸 ءMFA برای حسابهای حساس فعال شود
🔸 ءRate Limiting روی Endpointهای Login اعمال شود
🔸 ءAudit Log تمام عملیات امنیتی ذخیره شود
🔸 از OAuth2 و OpenID Connect استاندارد استفاده شود
⭐️ برای بهتر شدن Identity Provider چه کارهایی انجام دهیم؟
✅ Key Rotation خودکار
✅ MFA و Passwordless Authentication
✅ Device Tracking
✅ Session Management
✅ Distributed Cache برای Token Validation
✅ Audit Logging و Monitoring
✅ Revocation List برای ابطال Tokenها
✅ High Availability و Replicaهای متعدد
✅ استفاده از OpenIddict یا Keycloak به جای ساخت همه چیز از صفر
💡 مهمترین نکته:
ءIdentity Provider فقط یک سرویس Login نیست.
در سیستمهای بزرگ، IdP به قلب امنیت کل سازمان تبدیل میشود.
هرچه زودتر احراز هویت را از Business Domainها جدا کنید، توسعه سرویسها سادهتر و امنیت سیستم قابل مدیریتتر خواهد شد.
🔖هشتگها:
#identityserver #oauth2 #jwt #security #microservices #modularmonolith #aspnetcore