البرنامج التعليمي: استخدام هوية مدارة لاستدعاء وظائف Azure من تطبيق Azure Spring Apps

إشعار

يعد Azure Spring Apps هو الاسم الجديد لخدمة Azure Spring Cloud. رغم أن الخدمة تحمل اسماً جديداً، سترى الاسم القديم في بعض الأماكن لفترة من الوقت بينما نعمل على تحديث الأصول مثل لقطات الشاشة، ومقاطع الفيديو، والرسوم التخطيطية.

تنطبق هذه المقالة على: ✔️ Basic/Standard ✔️ Enterprise

توضح لك هذه المقالة كيفية إنشاء هوية مدارة لتطبيق مستضاف في Azure Spring Apps واستخدامه لاستدعاء الوظائف التي تم تشغيلها بواسطة HTTP.

تم إنشاء كل من Azure Functions وApp Services في دعم لمصادقة Microsoft Entra. باستخدام إمكانية المصادقة المضمنة هذه جنبا إلى جنب مع الهويات المدارة لتطبيقات Azure Spring، يمكنك استدعاء خدمات RESTful باستخدام دلالات OAuth الحديثة. لا يتطلب هذا الأسلوب تخزين الأسرار في التعليمات البرمجية ويوفر عناصر تحكم أكثر دقة للتحكم في الوصول إلى الموارد الخارجية.

المتطلبات الأساسية

إنشاء مجموعة موارد

وتُعد مجموعة الموارد عبارة عن حاوية منطقية يتم فيها توزيع موارد Azure وإدارتها. استخدم الأمر التالي لإنشاء مجموعة موارد لاحتواء تطبيق Function:

az group create --name <resource-group-name> --location <location>

لمزيد من المعلومات، راجع الأمر az group create .

إنشاء تطبيق دالة

لإنشاء تطبيق دالة، يجب أولا إنشاء حساب تخزين احتياطي. يمكنك استخدام الأمر az storage account create .

هام

يجب أن يكون لكل تطبيق وظيفة وحساب تخزين اسم فريد.

استخدم الأمر التالي لإنشاء حساب التخزين. استبدل <function-app-name> باسم تطبيق الوظائف واسم <حساب> التخزين باسم حساب التخزين الخاص بك.

az storage account create \
    --resource-group <resource-group-name> \
    --name <storage-account-name> \
    --location <location> \
    --sku Standard_LRS

بعد إنشاء حساب التخزين، استخدم الأمر التالي لإنشاء تطبيق الوظائف:

az functionapp create \
    --resource-group <resource-group-name> \
    --name <function-app-name> \
    --consumption-plan-location <location> \
    --os-type windows \
    --runtime node \
    --storage-account <storage-account-name> \
    --functions-version 4

دون القيمة التي تم إرجاعها hostNames ، والتي تكون بالتنسيق https://<your-functionapp-name>.azurewebsites.net. استخدم هذه القيمة في عنوان URL الجذر لتطبيق الوظائف لاختبار تطبيق الوظائف.

تمكين مصادقة Microsoft Entra

استخدم الخطوات التالية لتمكين مصادقة Microsoft Entra للوصول إلى تطبيق الوظائف.

  1. في مدخل Microsoft Azure، انتقل إلى مجموعة الموارد الخاصة بك ثم افتح تطبيق الوظائف الذي أنشأته.
  2. في جزء التنقل، حدد Authentication ثم حدد Add identity provider في الجزء الرئيسي.
  3. في صفحة إضافة موفر هوية، حدد Microsoft من القائمة المنسدلة موفر الهوية.
  4. حدد إضافة.
  5. بالنسبة لإعدادات الأساسيات في صفحة إضافة موفر هوية، قم بتعيين أنواع الحسابات المدعومة إلى أي دليل Microsoft Entra - متعدد المستأجرين.
  6. تعيين الطلبات غير المصادق عليها إلى HTTP 401 غير مصرح به: مستحسن لواجهات برمجة التطبيقات. يضمن هذا الإعداد رفض جميع الطلبات غير المصادق عليها (استجابة 401).
  7. حدد إضافة.

بعد إضافة الإعدادات، تتم إعادة تشغيل تطبيق Function وتتم مطالبة جميع الطلبات اللاحقة بتسجيل الدخول من خلال معرف Microsoft Entra. يمكنك اختبار رفض الطلبات غير المصادق عليها حاليا باستخدام عنوان URL الجذر لتطبيق Function (يتم إرجاعه في hostNames إخراج az functionapp create الأمر). يجب إعادة توجيهك بعد ذلك إلى شاشة تسجيل الدخول إلى Microsoft Entra الخاصة بمؤسستك.

تحتاج إلى معرف التطبيق ومعرف التطبيق URI للاستخدام لاحقا. في مدخل Microsoft Azure، انتقل إلى تطبيق الوظائف الذي أنشأته.

للحصول على معرف التطبيق، حدد المصادقة في جزء التنقل، ثم انسخ قيمة معرف التطبيق (العميل) لموفر الهوية الذي يتضمن اسم تطبيق الوظائف.

لقطة شاشة لمدخل Azure تعرض صفحة المصادقة لتطبيق Function، مع تمييز اسم تطبيق Function في موفر الهوية.

للحصول على معرف التطبيق URI، حدد كشف واجهة برمجة التطبيقات في جزء التنقل، ثم انسخ قيمة معرف التطبيق URI .

لقطة شاشة لمدخل Azure تعرض صفحة كشف واجهة برمجة التطبيقات لتطبيق الوظائف مع تمييز معرف التطبيق URI.

إنشاء دالة مشغلة HTTP

في دليل محلي فارغ، استخدم الأوامر التالية لإنشاء تطبيق دالة جديد وإضافة دالة مشغلة HTTP:

func init --worker-runtime node
func new --template HttpTrigger --name HttpTrigger

بشكل افتراضي، تستخدم الوظائف المصادقة المستندة إلى المفتاح لتأمين نقاط نهاية HTTP. لتمكين مصادقة Microsoft Entra لتأمين الوصول إلى الوظائف، قم بتعيين authLevel المفتاح إلى anonymous في ملف function.json ، كما هو موضح في المثال التالي:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "type": "httpTrigger",
      ...
    }
  ]
}

لمزيد من المعلومات، راجع قسم نقاط نهاية HTTP الآمنة في تأمين وظائف Azure.

استخدم الأمر التالي لنشر التطبيق إلى المثيل الذي تم إنشاؤه في الخطوة السابقة:

func azure functionapp publish <function-app-name>

يجب أن يسرد الإخراج من أمر النشر عنوان URL إلى الدالة التي تم إنشاؤها حديثا، كما هو موضح في الإخراج التالي:

Deployment completed successfully.
Syncing triggers...
Functions in <your-functionapp-name>:
    HttpTrigger - [httpTrigger]
        Invoke url: https://<function-app-name>.azurewebsites.net/api/httptrigger

إنشاء مثيل وتطبيق خدمة Azure Spring Apps

استخدم الأوامر التالية لإضافة ملحق spring وإنشاء مثيل جديد من Azure Spring Apps:

az extension add --upgrade --name spring
az spring create \
    --resource-group <resource-group-name> \
    --name <Azure-Spring-Apps-instance-name> \
    --location <location>

استخدم الأمر التالي لإنشاء تطبيق يسمى msiapp بهوية مدارة معينة من قبل النظام، كما هو مطلوب من قبل المعلمة --assign-identity :

az spring app create \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --name "msiapp" \
    --assign-endpoint true \
    --assign-identity

إنشاء نموذج تطبيق Spring Boot لاستدعاء الدالة

يستدعي هذا النموذج الدالة التي تم تشغيلها بواسطة HTTP عن طريق طلب رمز مميز للوصول أولا من نقطة نهاية MSI واستخدام هذا الرمز المميز لمصادقة طلب HTTP للوظيفة. لمزيد من المعلومات، راجع قسم الحصول على رمز مميز باستخدام HTTP في كيفية استخدام الهويات المدارة لموارد Azure على جهاز Azure الظاهري للحصول على رمز مميز للوصول.

  1. استخدم الأمر التالي لنسخ نموذج المشروع:

    git clone https://github.com/Azure-Samples/azure-spring-apps-samples.git
    
  2. استخدم الأمر التالي لتحديد URI الدالة واسم المشغل في خصائص التطبيق:

    cd azure-spring-apps-samples/managed-identity-function
    vim src/main/resources/application.properties
    
  3. لاستخدام الهوية المدارة لتطبيقات Azure Spring Apps، أضف الخصائص التالية بهذه القيم إلى src/main/resources/application.properties.

    azure.function.uri=https://<function-app-name>.azurewebsites.net
    azure.function.triggerPath=httptrigger
    azure.function.application-id.uri=<function-app-application-ID-uri>
    
  4. استخدم الأمر التالي لحزم نموذج التطبيق:

    mvn clean package
    
  5. استخدم الأمر التالي لنشر التطبيق إلى Azure Spring Apps:

    az spring app deploy \
        --resource-group <resource-group-name> \
        --service <Azure-Spring-Apps-instance-name> \
        --name "msiapp" \
        --artifact-path target/asc-managed-identity-function-sample-0.1.0.jar
    
  6. استخدم الأمر التالي للوصول إلى نقطة النهاية العامة أو نقطة نهاية الاختبار لاختبار تطبيقك:

    curl https://<Azure-Spring-Apps-instance-name>-msiapp.azuremicroservices.io/func/springcloud
    

    يتم إرجاع الرسالة التالية في نص الاستجابة.

    Function Response: Hello, springcloud. This HTTP triggered function executed successfully.
    

الخطوات التالية