مصادقة App Service والشبكات
فعّل موفّرات المصادقة المضمّنة (Entra ID وGoogle وGitHub) لتطبيق الويب، وقيّد حركة المرور الواردة باستخدام تكامل VNet وقيود الوصول.
مصادقة App Service والشبكات درس مجاني في Azure Fundamentals على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Azure Fundamentals، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Azure Fundamentals 4 دروس في المجموع.
المصادقة المضمنة في App Service
توفر Azure App Service وحدة مضمنة للمصادقة والتفويض (تُسمى أحيانًا EasyAuth) تتولى تدفقات تسجيل الدخول والتحقق من صحة الرموز المميزة وإدارة الجلسات من دون إجراء أي تغييرات على تعليمات تطبيقك البرمجية. ويمكنك تمكينها مباشرةً في مدخل Azure واختيار موفري هوية متعددين. ويُعد ذلك مناسبًا لإضافة المصادقة بسرعة إلى واجهة API أو أداة داخلية من دون تنفيذ تدفقات OAuth بنفسك.
موفرو الهوية المدعومون
تدعم مصادقة App Service عدة موفري هوية بصورة مضمنة، وهم: Microsoft Entra ID (لتسجيلات الدخول المؤسسية/للشركات)، وGoogle، وFacebook، وTwitter/X، وGitHub، وأي موفر متوافق مع OpenID Connect. تسجل تطبيقك لدى الموفر المحدد للحصول على معرّف العميل والسر، ثم تكوّن هاتين القيمتين في App Service. ويمكن تمكين عدة موفرين في الوقت نفسه، مما يتيح للمستخدمين اختيار طريقة تسجيل الدخول.
# Enable Microsoft Entra ID authentication via CLI
az webapp auth microsoft update \
--name MyUniqueWebApp \
--resource-group MyRG \
--client-id '<Entra-App-Client-ID>' \
--client-secret '<Client-Secret>' \
--issuer 'https://sts.windows.net/<TenantId>/'
# Set action when unauthenticated (redirect or 401)
az webapp auth update \
--name MyUniqueWebApp \
--resource-group MyRG \
--unauthenticated-client-action RedirectToLoginPageمخزن الرموز المميزة والوصول إلى مطالبات المستخدم
عند تمكين المصادقة، تخزن App Service الرموز المميزة التي تم التحقق منها في مخزن الرموز المميزة — وهو مخزن دائم لكل جلسة مستخدم. ويمكن لتعليمات تطبيقك البرمجية الوصول إلى مطالبات المستخدم الذي تمت مصادقته من خلال رؤوس طلب HTTP خاصة تحقنها وحدة EasyAuth: X-MS-CLIENT-PRINCIPAL-NAME (البريد الإلكتروني/UPN)، وX-MS-CLIENT-PRINCIPAL-ID (معرّف الكائن)، وX-MS-TOKEN-AAD-ACCESS-TOKEN للوصول إلى رمز الوصول الخام.
// Node.js: read user identity from EasyAuth headers
app.get('/profile', (req, res) => {
const userName = req.headers['x-ms-client-principal-name'];
const userId = req.headers['x-ms-client-principal-id'];
res.json({ name: userName, id: userId });
});
// Or decode the full claims JSON from the header
const principalHeader = req.headers['x-ms-client-principal'];
const claims = JSON.parse(Buffer.from(principalHeader, 'base64').toString());تكامل VNet لحركة المرور الصادرة
يتيح تكامل VNet لتطبيق App Service إجراء مكالمات صادرة إلى الموارد الموجودة داخل Azure Virtual Network — مثل الأجهزة الظاهرية وقواعد بيانات SQL وواجهات API الداخلية — من دون تعريض تلك الموارد للإنترنت العام. ويحصل التطبيق على بطاقة NIC افتراضية في شبكة فرعية مفوضة من VNet، ويمكنه الوصول إلى أي مورد يمكن لـ VNet الوصول إليه، بما في ذلك الموارد المحلية عبر VPN أو ExpressRoute. يتوفر تكامل VNet بدءًا من المستوى Standard.
# Enable VNet Integration
az webapp vnet-integration add \
--name MyUniqueWebApp \
--resource-group MyRG \
--vnet MyVNet \
--subnet AppServiceSubnet
# Route ALL traffic through the VNet (including internet)
az webapp config appsettings set \
--name MyUniqueWebApp \
--resource-group MyRG \
--settings WEBSITE_VNET_ROUTE_ALL=1نقاط النهاية الخاصة لحركة المرور الواردة
بينما يتولى تكامل VNet حركة المرور الصادرة، تتولى نقطة النهاية الخاصة حركة المرور الواردة؛ فهي تجعل App Service متاحًا فقط من داخل VNet باستخدام عنوان IP خاص. ويُحظر الوصول الخارجي عبر الإنترنت إلى azurewebsites.net عندما تكون نقطة النهاية الخاصة هي طريقة الوصول الوحيدة. ويُستخدم ذلك لواجهات API الداخلية وبوابات الإدارة التي يجب ألا تكون مكشوفة للإنترنت العام مطلقًا.
# Create a private endpoint for the web app
az network private-endpoint create \
--name MyWebAppPE \
--resource-group MyRG \
--vnet-name MyVNet \
--subnet PrivateEndpointSubnet \
--private-connection-resource-id \
'/subscriptions/.../providers/Microsoft.Web/sites/MyUniqueWebApp' \
--group-id sites \
--connection-name MyWebAppConnectionقيود الوصول
تتيح لك قيود الوصول في App Service تحديد قائمة سماح أو حظر لعناوين IP الخاصة بحركة المرور الواردة. وتُقيَّم القواعد حسب ترتيب الأولوية (الرقم الأقل = الأولوية الأعلى). ويمكنك تقييد الوصول إلى نطاقات IP محددة (مثل عنوان IP الصادر من شبكة VPN في مكتبك)، أو علامات خدمة Azure (مثل AzureLoadBalancer)، أو شبكات VNet الفرعية المحددة. استخدم قيود الوصول لتأمين فتحة التدريج بحيث لا يتمكن من الوصول إليها إلا نطاق IP الخاص بفريقك.
# Allow only a specific IP range
az webapp config access-restriction add \
--name MyUniqueWebApp \
--resource-group MyRG \
--priority 100 \
--action Allow \
--ip-address 203.0.113.0/24 \
--rule-name 'OfficeRange'
# Allow Azure Front Door service tag
az webapp config access-restriction add \
--name MyUniqueWebApp \
--resource-group MyRG \
--priority 200 \
--action Allow \
--service-tag AzureFrontDoor.Backend \
--rule-name 'FrontDoor'الاتصالات المختلطة
تتيح الاتصالات المختلطة (من BizTalk) لـ App Service الوصول إلى الموارد المحلية من دون الحاجة إلى تكامل VNet أو بوابة VPN. إذ ينشئ عامل ترحيل خفيف مثبّت محليًا اتصالًا صادرًا بـ Azure Service Bus، ثم يتصل تطبيقك عبر هذا الترحيل. تعمل الاتصالات المختلطة على مستوى TCP وتدعم أي منفذ، ولذلك فهي مفيدة للاتصال بقواعد البيانات أو واجهات API المحلية القديمة التي لا يمكن نقلها إلى Azure.
# Add a Hybrid Connection to reach on-prem SQL
az webapp hybrid-connection add \
--name MyUniqueWebApp \
--resource-group MyRG \
--namespace myServiceBusNS \
--hybrid-connection on-prem-sql-relay
# The Hybrid Connection Manager agent must be installed
# and configured on the on-premises server to complete the relayالهوية المُدارة لـ App Service
عيّن هوية مُدارة لتطبيق App Service حتى يتمكن من المصادقة لدى خدمات Azure الأخرى (Key Vault وBlob Storage وSQL Database) من دون تخزين بيانات الاعتماد في أي مكان. تدير Azure بيانات اعتماد الهوية تلقائيًا. استخدم هوية معينة من النظام (مرتبطة بدورة حياة التطبيق) أو هوية معينة من المستخدم (مشتركة بين عدة تطبيقات). امنح الهوية أدوار RBAC على الموارد المستهدفة.
# Enable system-assigned managed identity
az webapp identity assign \
--name MyUniqueWebApp \
--resource-group MyRG
# Grant the identity access to Key Vault secrets
az keyvault set-policy \
--name MyKeyVault \
--object-id $(az webapp identity show \
--name MyUniqueWebApp \
--resource-group MyRG \
--query principalId -o tsv) \
--secret-permissions get listتمكين CORS
يتحكم مشاركة الموارد متعددة المصادر (CORS) في النطاقات التي يمكنها إجراء مكالمات API مستندة إلى المستعرض إلى تطبيق App Service. كوّن المصادر المسموح بها في إعدادات CORS — ولا تُرجع قيمة بدل شاملة (*) في بيئة الإنتاج لواجهات API التي تتطلب المصادقة. تضيف ميزة CORS المضمنة في App Service رؤوس الاستجابة Access-Control-Allow-Origin تلقائيًا، مما يلغي الحاجة إلى وسيط CORS في تعليمات تطبيقك البرمجية للحالات البسيطة.
# Allow specific origin
az webapp cors add \
--name MyUniqueWebApp \
--resource-group MyRG \
--allowed-origins https://www.contoso.com
# View current CORS settings
az webapp cors show \
--name MyUniqueWebApp \
--resource-group MyRG
# Remove a CORS origin
az webapp cors remove \
--name MyUniqueWebApp \
--resource-group MyRG \
--allowed-origins https://old.contoso.comبيئات App Service (ASE)
إن بيئة App Service (ASE) هي عملية نشر مخصصة ومعزولة بالكامل من App Service تعمل داخل VNet الخاص بك. وهي توفر أعلى مستوى من عزل الشبكة وقابلية التوسع (حتى 200 مثيل) والتوافق مع متطلبات الامتثال. ويزيل ASE v3 الحاجة إلى عنوان IP عام مخصص، كما يدعم نقاط النهاية الخاصة بصورة أصلية. والمقابل هو التكلفة الأعلى بكثير؛ إذ يُستخدم ASE لأحمال العمل المؤسسية ذات متطلبات العزل الصارمة.
ملخص أفضل ممارسات الأمان
لنشر App Service بصورة آمنة: افرض استخدام HTTPS فقط، واستخدم قيود الوصول للحد من عناوين IP الواردة، ومكّن الهوية المُدارة لتجنب وضع الأسرار في التكوين، وخزّن الأسرار في Key Vault باستخدام مراجع Key Vault، وطبّق الحد الأدنى لإصدار TLS وهو 1.2، ومكّن Defender for App Service لاكتشاف التهديدات، وراجع بانتظام توصيات Azure Security Center لمورد التطبيق.
# Enforce HTTPS and minimum TLS version
az webapp update \
--name MyUniqueWebApp \
--resource-group MyRG \
--https-only true
az webapp config set \
--name MyUniqueWebApp \
--resource-group MyRG \
--min-tls-version '1.2' \
--ftps-state Disabledتحقق سريع
اختبر مدى فهمك لمفاهيم Microsoft Azure Fundamentals (AZ-900) الواردة في هذا الدرس.
مراجعة الدرس
تعلمت في هذا الدرس أن المصادقة المضمنة (EasyAuth) تضيف تسجيل الدخول عبر موفر الهوية من دون تغييرات في التعليمات البرمجية، وأن تكامل VNet يوجّه حركة المرور الصادرة عبر شبكتك الافتراضية، بينما تعمل نقاط النهاية الخاصة على تقييد حركة المرور الواردة، وأن الهوية المُدارة تتيح المصادقة من دون كلمات مرور لدى خدمات Azure الأخرى. بعد ذلك، سنستكشف Azure Container Registry.
الأسئلة الشائعة
هل درس «مصادقة App Service والشبكات» مجاني؟
نعم — نص درس «مصادقة App Service والشبكات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Azure Fundamentals، انتقل إلى CoddyKit PRO. تتضمن دورة Azure Fundamentals 4 دروس في المجموع.
ماذا ستتعلم في «مصادقة App Service والشبكات»؟
فعّل موفّرات المصادقة المضمّنة (Entra ID وGoogle وGitHub) لتطبيق الويب، وقيّد حركة المرور الواردة باستخدام تكامل VNet وقيود الوصول. تتمرن على Azure Fundamentals مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Azure Fundamentals؟
لا تُشترط خبرة سابقة. Azure Fundamentals على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «مصادقة App Service والشبكات»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Azure Fundamentals هذا؟
نعم. كل درس في Azure Fundamentals يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- إنشاء خطة App Service وتطبيق ويب
- فتحات النشر والتبديل
- التوسع التلقائي والنطاقات المخصصة
- مصادقة App Service والشبكات