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
Post a Comment