Restricting Multi-Tenant App Registrations to Specific Tenants in Entra ID | مش كل Tenant يعدي: إزاي تقيّد تطبيقك الـ Multi-Tenant في Entra ID

مش كل Tenant يعدي: إزاي تقيّد تطبيقك الـ Multi-Tenant في Entra ID

إزاي تتحكم في مين يستخدم App Registration بتاعك من بره تنانتك، من غير ما تكسر الفكرة الأساسية اللي هي إنه Multi-Tenant.


المقدمة



حصل معايا الموضوع ده وأنا بشتغل على App Registration داخلي، اتعمل Multi-Tenant من الأول عشان استخدام مؤقت مع شركة تانية بعد Merger، وبعد ما خلصنا الغرض، لقيت إن Service Principal بتاع التطبيق ده لسه موجود في تنانتات تانية معملهاش أي Review. المشكلة إن Entra ID مش بيعطيك زرار جاهز اسمه "اسمح للـ Tenants دول بس"، وده بيخلي كتير من المهندسين يفترضوا إن الموضوع مقفول تلقائي بمجرد ما الاستخدام يخلص. الموضوع ده مهم جداً لو عندك SaaS App أو حتى Internal Tool بيتشارك بين شركات فرعية، لأن أي Tenant تاني ممكن يعمل Consent عليه لو الـ Publisher settings مش مضبوطة صح.

💡 المتطلبات:
  • صلاحية Application Administrator أو Cloud Application Administrator على الـ App Registration
  • Permission اسمه Application.ReadWrite.All على Microsoft Graph
  • Microsoft Graph PowerShell SDK أو الوصول لـ Graph Explorer
  • لو عايز Logging على مستوى الكود، محتاج Access Level على الـ Application Insights أو أي Logging Sink بتاع التطبيق نفسه

الفكرة الأساسية: signInAudience مش أداة تقييد حقيقية

أول حاجة لازم تفهمها إن property اسمها signInAudience في الـ App Registration بتحدد نوع الـ Tenants اللي أصلاً مسموح لهم يعملوا Consent، لكنها مش أداة تقييد على مستوى Tenant بعينه، هي بس تحدد الفئة العامة.

القيمة المعنى الاستخدام المناسب
AzureADMyOrg Single Tenant بس، حسابات تنانتك أنت تطبيقات داخلية خالص
AzureADMultipleOrgs أي Entra Tenant يقدر يعمل Consent SaaS تجاري أو استخدام بين شركات فرعية
AzureADandPersonalMicrosoftAccount Multi-Tenant + حسابات Microsoft الشخصية تطبيقات Consumer

⚠️ لو حاولت ترجع من AzureADMultipleOrgs لـ AzureADMyOrg وفيه Service Principals متعملة أصلاً في Tenants تانية، Graph هيرفض العملية. لازم تشيل الـ Service Principals من الـ Tenants دي الأول، ولو مش قادر توصلهم، الحل الوحيد هو التواصل مع Microsoft Support.

التقييد الحقيقي بيحصل في الكود، مش في الـ Portal

الحقيقة اللي محدش بيقولها بصوت عالي: Entra ID مفيهاش Setting اسمه "Restrict this app to these Tenant IDs" جوه الـ App Registration بتاعك. التقييد الفعلي بيتم عن طريق فحص Claim اسمه tid جوه الـ Token نفسه وقت ما التطبيق يستقبله.

1. تحقق من الـ tid Claim قبل ما تكمل أي Logic

أول حاجة لو حابب تتأكد من شكل الـ Claim ده وقت الـ Testing، تقدر تعمل Decode سريع لـ Token عن طريق PowerShell:

$token = "<paste access token here>"
$payload = $token.Split('.')[1].Replace('-','+

Comments

Popular posts from this blog

Entra ID Free vs P1 vs P2: What You Actually Get at Each License Tier | Entra ID Free ولا P1 ولا P2: الفرق الحقيقي بين الباقات

Conditional Access Design Mistakes That Lock Admins Out of Microsoft Entra ID | لما الـ Conditional Access يقفل عليك الباب وأنت جوه Tenant

App Registrations vs Enterprise Applications in Entra ID: Permissions and Consent Explained | App Registration و Enterprise Application: مين بيعمل إيه في الـ Permissions والـ Consent؟