كيفية استخدام الهويات المُدارة لموارد Azure على جهاز Azure الظاهري للحصول على رمز وصول

الهويات المدارة لموارد Azure هي ميزة من ميزات معرف Microsoft Entra. تخضع كل من خدمات Azure التي تدعم الهويات المدارة لموارد Azure إلى المخطط الزمني الخاص بها. تأكد من مراجعة توافر الهويات المدارة للمورد والمشكلات المعروفة قبل البدء.

توفر الهويات المدارة لموارد Azure خدمات Azure بهوية مدارة تلقائيا في Microsoft Entra ID. يمكنك استخدام هذه الهوية للمصادقة على أي خدمة تدعم مصادقة Microsoft Entra، دون وجود بيانات اعتماد في التعليمات البرمجية الخاصة بك.

توفر هذه المقالة أمثلة التعليمات البرمجية والبرامج النصية المختلفة للحصول على الرمز المميز. كما تحتوي أيضًا على إرشادات حول معالجة انتهاء صلاحية الرمز المميز وأخطاء HTTP.

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

إذا كنت تخطط لاستخدام أمثلة Azure PowerShell في هذه المقالة، فتأكد من تثبيت أحدث إصدار من Azure PowerShell.

هام

  • تفترض جميع نماذج التعليمات البرمجية / البرنامج النصي في هذه المقالة أن العميل يعمل على جهاز ظاهري بهويات مُدارة لموارد Azure. استخدم ميزة "Connect" للجهاز الظاهري في مدخل Microsoft Azure للاتصال عن بُعد بجهاز ظاهري. للحصول على تفاصيل حول تمكين الهويات المُدارة لموارد Azure على جهاز ظاهري، راجع تكوين الهويات المُدارة لموارد Azure على جهاز ظاهري باستخدام مدخل Microsoft Azure أو إحدى المقالات المتغيرة (باستخدام PowerShell أو CLI أو قالب أو Azure SDK).

هام

  • حد الأمان للهويات المدارة لموارد Azure، هو المورد الذي يتم فيه استخدام الهوية. يمكن لجميع التعليمات البرمجية / البرامج النصية التي تعمل على جهاز ظاهري طلب واسترداد الرموز المميزة لأي هويات مُدارة متاحة عليها.

نظرة عامة

يمكن لتطبيق العميل طلب رمز مميز للوصول لتطبيق هوية مُدارة فقط للوصول إلى مورد معين. يستند الرمز المميز إلى الهويات المُدارة لمبدأ خدمة موارد Azure. على هذا النحو، ليست هناك حاجة للعميل لتسجيل نفسه للحصول على رمز مميز للوصول بموجب كيان الخدمة الخاص به. الرمز المميز مناسب للاستخدام كرمز لحامله في استدعاءات الخدمة إلى الخدمة التي تتطلب بيانات اعتماد العميل.

الارتباط ‏‏الوصف
الحصول على رمز مميز باستخدام HTTP تفاصيل البروتوكول للهويات المُدارة لنقطة نهاية الرمز المميز لموارد Azure
الحصول على رمز مميز باستخدام Azure.Identity الحصول على رمز مميز باستخدام مكتبة Azure.Identity
احصل على رمز مميز باستخدام مكتبة Microsoft.Azure.Services.AppAuthentication لـ .NET مثال على استخدام مكتبة Microsoft.Azure.Services.AppAuthentication من عميل .NET
الحصول على رمز مميز باستخدام C#‎ مثال على استخدام الهويات المُدارة لنقطة نهاية REST لموارد Azure من عميل C#‎
الحصول على رمز مميز باستخدام Java مثال على استخدام الهويات المُدارة لنقطة نهاية REST لموارد Azure من عميل Java
الحصول على رمز مميز باستخدام Go مثال على استخدام الهويات المُدارة لنقطة نهاية REST لموارد Azure من عميل Go
الحصول على رمز مميز باستخدام PowerShell مثال على استخدام الهويات المُدارة لنقطة نهاية REST لموارد Azure من عميل PowerShell
الحصول على رمز مميز باستخدام CURL مثال على استخدام الهويات المُدارة لنقطة نهاية REST لموارد Azure من عميل Bash/CURL
معالجة التخزين المؤقت للرمز المميز إرشادات لمعالجة رموز الوصول المميزة منتهية الصلاحية
معالجة الخطأ تم إرجاع إرشادات لمعالجة أخطاء HTTP من الهويات المدارة لنقطة نهاية الرمز المميز لموارد Azure
معرفات الموارد لخدمات Azure مكان الحصول على معرفات الموارد لخدمات Azure المدعومة

الحصول على رمز مميز باستخدام HTTP

تستند الواجهة الأساسية للحصول على رمز مميز للوصول إلى REST، ما يجعلها في متناول أي تطبيق عميل يعمل على الجهاز الظاهري يمكنه إجراء مكالمات "HTTP" REST. يشبه هذا الأسلوب نموذج برمجة Microsoft Entra، باستثناء أن العميل يستخدم نقطة نهاية على الجهاز الظاهري (مقابل نقطة نهاية Microsoft Entra).

نموذج طلب باستخدام نقطة نهاية خدمة بيانات تعريف مثيل Azure (IMDS) (موصى به):

GET 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/' HTTP/1.1 Metadata: true
العنصر الوصف
GET فعل "HTTP"، الذي يُشير إلى رغبتك في استرداد البيانات من نقطة النهاية. في هذه الحالة، يكون رمز الوصول هو OAuth.
http://169.254.169.254/metadata/identity/oauth2/token الهويات المدارة لنقطة نهاية موارد Azure لخدمة بيانات تعريف المثيل.
api-version تُشير معلمة سلسلة استعلام إلى إصدار API لنقطة نهاية IMDS. استخدم إصدار API 2018-02-01 أو أحدث.
resource معلمة سلسلة استعلام، تشير إلى عنوان URI الخاص بمعرف التطبيق للمورد الهدف. كما يظهر في aud مطالبة (الجمهور) بالرمز المميز الصادر. يطلب هذا المثال رمز مميز للوصول إلى إدارة موارد Azure، التي تحتوي على عنوان URL الخاص بمعرف التطبيق لـ https://management.azure.com/.
Metadata حقل عنوان طلب HTTP مطلوب من قبل الهويات المُدارة. يتم استخدام هذه المعلومات كتخفيف من مخاطر هجمات تزييف طلب من جانب الخادم (SSRF). يجب تعيين هذه القيمة على "صحيح"، في جميع الأحرف الصغيرة.
object_id (اختياري) معلمة سلسلة الاستعلام، تشير إلى معرّف العنصر للهوية المُدارة التي تريد الرمز المميز لها. مطلوب، إذا كان الجهاز الظاهري يحتوي على هويات مُدارة متعددة مخصصة للمستخدم.
client_id (اختياري) معلمة سلسلة الاستعلام، تشير إلى معرّف client_id للهوية المُدارة التي تريد الرمز المميز لها. مطلوب، إذا كان الجهاز الظاهري يحتوي على هويات مُدارة متعددة مخصصة للمستخدم.
msi_res_id (اختياري) معلمة سلسلة استعلام، تشير إلى msi_res_id (معرف مورد Azure) للهوية المدارة التي ترغب في الرمز المميز لها. مطلوب، إذا كان الجهاز الظاهري يحتوي على هويات مُدارة متعددة مخصصة للمستخدم.

نموذج الاستجابة:

HTTP/1.1 200 OK
Content-Type: application/json
{
  "access_token": "eyJ0eXAi...",
  "refresh_token": "",
  "expires_in": "3599",
  "expires_on": "1506484173",
  "not_before": "1506480273",
  "resource": "https://management.azure.com/",
  "token_type": "Bearer"
}
العنصر الوصف
access_token رمز الوصول المميز المطلوب. عند استدعاء واجهة برمجة تطبيقات REST المؤمنة، يتم تضمين الرمز المميز في حقل عنوان طلب Authorization كرمز مميز "الرمز المميز للحامل"، مما يسمح لواجهة برمجة التطبيقات بمصادقة المُستدعي.
refresh_token غير مستخدم من جانب الهويات المُدارة لموارد Azure.
expires_in عدد الثواني التي يظل فيها رمز الوصول صالحًا، قبل انتهاء صلاحيته، من وقت الإصدار. يمكن العثور على وقت الإصدار في مطالبة iat للرمز المميز.
expires_on الفترة الزمنية التي تنتهي فيها صلاحية رمز الوصول. يتم تمثيل التاريخ على أنه عدد الثواني من "1970-01-01T0:0:0Z UTC" (يتوافق مع مطالبة الرمز المميز exp).
not_before الفترة الزمنية التي يسري مفعول رمز الوصول فيها ويمكن قبولها. يتم تمثيل التاريخ على أنه عدد الثواني من "1970-01-01T0:0:0Z UTC" (يتوافق مع مطالبة الرمز المميز nbf).
resource المورد الذي تم طلب رمز الوصول المميز له، والذي يطابق معلمة سلسلة استعلام resource الخاصة بالطلب.
token_type نوع الرمز المميز، وهو رمز وصول "للحامل"، مما يعني أن المورد يمكنه منح حق الوصول إلى حامل هذا الرمز المميز.

الحصول على رمز مميز باستخدام مكتبة عميل هوية Azure

استخدام مكتبة عميل هوية Azure هو الطريقة المستحسنة لاستخدام الهويات المُدارة. يتم دمج كافة Azure SDKs مع المكتبة Azure.Identity التي توفر الدعم لـ DefaultAzureCredential. تسهل هذه الفئة استخدام الهويات المُدارة مع Azure SDKs.التعرف على المزيد

  1. ثبّت حزمة Azure.Identity وحزم مكتبة Azure SDK الأخرى المطلوبة، مثل Azure.Security.KeyVault.Secrets.

  2. استخدم نموذج التعليمات البرمجية أدناه. لا داعي للقلق بشأن انتهاء صلاحية الرموز الميزة. يمكنك مباشرة استخدام عملاء Azure SDK. تستخدم التعليمات البرمجية لإظهار كيفية الحصول على الرمز المميز، إذا كنت بحاجة إليه.

    using Azure.Core;
    using Azure.Identity;
    
    string userAssignedClientId = "<your managed identity client Id>";
    var credential = new DefaultAzureCredential(new DefaultAzureCredentialOptions { ManagedIdentityClientId = userAssignedClientId });
    var accessToken = credential.GetToken(new TokenRequestContext(new[] { "https://vault.azure.net" }));
    // To print the token, you can convert it to string 
    String accessTokenString = accessToken.Token.ToString();
    
    //You can use the credential object directly with Key Vault client.     
    var client = new SecretClient(new Uri("https://myvault.vault.azure.net/"), credential);
    

احصل على رمز مميز باستخدام مكتبة Microsoft.Azure.Services.AppAuthentication لـ .NET

بالنسبة لتطبيقات ودوال .NET، فإن أبسط طريقة للتعامل مع الهويات المُدارة لموارد Azure تكون من خلال حزمة Microsoft.Azure.Services.AppAuthentication. هذه المكتبة أيضًا تسمح لك باختبار التعليمات البرمجية محليًا على جهاز التطوير الخاص بك. يمكنك اختبار التعليمات البرمجية باستخدام حساب المستخدم الخاص بك من Visual Studio أو Azure CLI أو مصادقة Active Directory المتكاملة. لمزيد من المعلومات حول خيارات التطوير المحلية مع هذه المكتبة، راجع مرجع Microsoft.Azure.Services.AppAuthentication reference. يوضح لك هذا القسم كيفية البدء في استخدام المكتبة في التعليمات البرمجية لديك.

  1. أضف مراجع إلى حزم Microsoft.Azure.Services.AppAuthentication وMicrosoft.Azure.KeyVault إلى تطبيقك.

  2. أضف التعليمة البرمجية التالية إلى تطبيقك:

    using Microsoft.Azure.Services.AppAuthentication;
    using Microsoft.Azure.KeyVault;
    // ...
    var azureServiceTokenProvider = new AzureServiceTokenProvider();
    string accessToken = await azureServiceTokenProvider.GetAccessTokenAsync("https://management.azure.com/");
    // OR
    var kv = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
    

لمعرفة المزيد حول Microsoft.Azure.Services.AppAuthentication والعمليات التي تعرضها، راجع مرجع Microsoft.Azure.Services.AppAuthentication reference وApp Service وKeyVault مع الهويات المدارة لموارد Azure عينة .NET.

الحصول على رمز مميز باستخدام C#‎

using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Web.Script.Serialization; 

// Build request to acquire managed identities for Azure resources token
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/");
request.Headers["Metadata"] = "true";
request.Method = "GET";

try
{
    // Call /token endpoint
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();

    // Pipe response Stream to a StreamReader, and extract access token
    StreamReader streamResponse = new StreamReader(response.GetResponseStream()); 
    string stringResponse = streamResponse.ReadToEnd();
    JavaScriptSerializer j = new JavaScriptSerializer();
    Dictionary<string, string> list = (Dictionary<string, string>) j.Deserialize(stringResponse, typeof(Dictionary<string, string>));
    string accessToken = list["access_token"];
}
catch (Exception e)
{
    string errorText = String.Format("{0} \n\n{1}", e.Message, e.InnerException != null ? e.InnerException.Message : "Acquire token failed");
}

الحصول على رمز مميز باستخدام Java

استخدم مكتبة JSON هذه لاسترداد رمز مميز باستخدام Java.

import java.io.*;
import java.net.*;
import com.fasterxml.jackson.core.*;
 
class GetMSIToken {
    public static void main(String[] args) throws Exception {
 
        URL msiEndpoint = new URL("http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/");
        HttpURLConnection con = (HttpURLConnection) msiEndpoint.openConnection();
        con.setRequestMethod("GET");
        con.setRequestProperty("Metadata", "true");
 
        if (con.getResponseCode()!=200) {
            throw new Exception("Error calling managed identity token endpoint.");
        }
 
        InputStream responseStream = con.getInputStream();
 
        JsonFactory factory = new JsonFactory();
        JsonParser parser = factory.createParser(responseStream);
 
        while(!parser.isClosed()){
            JsonToken jsonToken = parser.nextToken();
 
            if(JsonToken.FIELD_NAME.equals(jsonToken)){
                String fieldName = parser.getCurrentName();
                jsonToken = parser.nextToken();
 
                if("access_token".equals(fieldName)){
                    String accesstoken = parser.getValueAsString();
                    System.out.println("Access Token: " + accesstoken.substring(0,5)+ "..." + accesstoken.substring(accesstoken.length()-5));
                    return;
                }
            }
        }
    }
}

الحصول على رمز مميز باستخدام Go

package main

import (
  "fmt"
  "io/ioutil"
  "net/http"
  "net/url"
  "encoding/json"
)

type responseJson struct {
  AccessToken string `json:"access_token"`
  RefreshToken string `json:"refresh_token"`
  ExpiresIn string `json:"expires_in"`
  ExpiresOn string `json:"expires_on"`
  NotBefore string `json:"not_before"`
  Resource string `json:"resource"`
  TokenType string `json:"token_type"`
}

func main() {
    
    // Create HTTP request for a managed services for Azure resources token to access Azure Resource Manager
    var msi_endpoint *url.URL
    msi_endpoint, err := url.Parse("http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01")
    if err != nil {
      fmt.Println("Error creating URL: ", err)
      return 
    }
    msi_parameters := msi_endpoint.Query()
    msi_parameters.Add("resource", "https://management.azure.com/")
    msi_endpoint.RawQuery = msi_parameters.Encode()
    req, err := http.NewRequest("GET", msi_endpoint.String(), nil)
    if err != nil {
      fmt.Println("Error creating HTTP request: ", err)
      return 
    }
    req.Header.Add("Metadata", "true")

    // Call managed services for Azure resources token endpoint
    client := &http.Client{}
    resp, err := client.Do(req) 
    if err != nil{
      fmt.Println("Error calling token endpoint: ", err)
      return
    }

    // Pull out response body
    responseBytes,err := ioutil.ReadAll(resp.Body)
    defer resp.Body.Close()
    if err != nil {
      fmt.Println("Error reading response body : ", err)
      return
    }

    // Unmarshall response body into struct
    var r responseJson
    err = json.Unmarshal(responseBytes, &r)
    if err != nil {
      fmt.Println("Error unmarshalling the response:", err)
      return
    }

    // Print HTTP response and marshalled response body elements to console
    fmt.Println("Response status:", resp.Status)
    fmt.Println("access_token: ", r.AccessToken)
    fmt.Println("refresh_token: ", r.RefreshToken)
    fmt.Println("expires_in: ", r.ExpiresIn)
    fmt.Println("expires_on: ", r.ExpiresOn)
    fmt.Println("not_before: ", r.NotBefore)
    fmt.Println("resource: ", r.Resource)
    fmt.Println("token_type: ", r.TokenType)
}

الحصول على رمز مميز باستخدام PowerShell

يوضح المثال التالي كيفية استخدام الهويات المدارة لنقطة نهاية REST لموارد Azure من عميل PowerShell من أجل:

  1. طلب رمز مميز للوصول.
  2. استخدم رمز الوصول لاستدعاء Azure Resource Manager REST API والحصول على معلومات حول الجهاز الظاهري. تأكد من استبدال معرف الاشتراك واسم مجموعة الموارد واسم الجهاز الظاهري بـ <SUBSCRIPTION-ID> و<RESOURCE-GROUP> و<VM-NAME> على التوالي.
Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fmanagement.azure.com%2F' -Headers @{Metadata="true"}

مثال على كيفية توزيع الرمز المميز للوصول من الاستجابة:

# Get an access token for managed identities for Azure resources
$response = Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fmanagement.azure.com%2F' `
                              -Headers @{Metadata="true"}
$content =$response.Content | ConvertFrom-Json
$access_token = $content.access_token
echo "The managed identities for Azure resources access token is $access_token"

# Use the access token to get resource information for the VM
$vmInfoRest = (Invoke-WebRequest -Uri 'https://management.azure.com/subscriptions/<SUBSCRIPTION-ID>/resourceGroups/<RESOURCE-GROUP>/providers/Microsoft.Compute/virtualMachines/<VM-NAME>?api-version=2017-12-01' -Method GET -ContentType "application/json" -Headers @{ Authorization ="Bearer $access_token"}).content
echo "JSON returned from call to get VM info:"
echo $vmInfoRest

الحصول على رمز مميز باستخدام CURL

curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fmanagement.azure.com%2F' -H Metadata:true -s

مثال على كيفية توزيع الرمز المميز للوصول من الاستجابة:

response=$(curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fmanagement.azure.com%2F' -H Metadata:true -s)
access_token=$(echo $response | python -c 'import sys, json; print (json.load(sys.stdin)["access_token"])')
echo The managed identities for Azure resources access token is $access_token

التخزين المؤقت للرمز المميز

يخزن النظام الفرعي للهويات المُدارة الرموز المميزة مؤقتًا ولكننا ما زلنا نوصي بتنفيذ التخزين المؤقت للرمز المميز في التعليمات البرمجية الخاصة بك. يجب أن تستعد للسيناريوهات التي يشير فيها المورد إلى انتهاء صلاحية الرمز المميز.

ينتج عن المكالمات السلكية إلى معرف Microsoft Entra فقط عندما:

  • يحدث خطأ في ذاكرة التخزين المؤقت بسبب عدم وجود رمز مميز في الهويات المُدارة لذاكرة التخزين المؤقت للنظام الفرعي لموارد Azure.
  • انتهت صلاحية الرمز المميز المخزن مؤقتاً.

معالجة الخطأ

تشير نقطة نهاية الهويات المُدارة إلى الأخطاء عبر حقل التعليمة البرمجية للحالة لعنوان رسالة استجابة HTTP، إما كأخطاء 4xx أو 5xx:

رمز الحالة سبب الخطأ كيفية التعامل
404 لم يتم العثور. يتم تحديث نقطة نهاية IMDS. أعد المحاولة باستخدام التراجع الأسي. انظر التوجيه أدناه.
410 تمر IMDS بتحديثات سيتوفر IMDS في غضون 70 ثانية
429 طلبات كثيرة جدًا. تم الوصول إلى حد التقييد IMDS. أعد المحاولة باستخدام التراجع الأسي. انظر التوجيه أدناه.
4xx خطأ في الطلب. معلمة واحدة أو أكثر من معلمات الطلب غير صحيحة. لا تحاول. افحص تفاصيل الخطأ للحصول على مزيد من المعلومات. أخطاء 4xx هي أخطاء وقت التصميم.
5xx خطأ عابر من الخدمة. أرجعت الهويات المدارة لنظام موارد Azure الفرعي أو معرف Microsoft Entra خطأ عابرا. يمكن إعادة المحاولة بأمان بعد الانتظار لمدة ثانية واحدة على الأقل. إذا قمت بإعادة المحاولة بسرعة كبيرة أو في كثير من الأحيان، فقد يرجع IMDS و/أو معرف Microsoft Entra خطأ حد المعدل (429).
المهلة يتم تحديث نقطة نهاية IMDS. أعد المحاولة باستخدام التراجع الأسي. انظر التوجيه أدناه.

في حالة حدوث خطأ، فإن نص استجابة HTTP المقابل يحتوي على JSON مع تفاصيل الخطأ:

العنصر الوصف
error معرف الخطأ.
error_description وصف مطول للخطأ. يمكن تغيير أوصاف الخطأ في أي وقت. لا تكتب تعليمة برمجية تتفرع بناءً على القيم الموجودة في وصف الخطأ.

مرجع استجابة HTTP

يوثق هذا القسم استجابات الخطأ المحتملة. حالة "200 OK" هي استجابة ناجحة، ويتم تضمين رمز الوصول في نص الاستجابة JSON، في عنصر access_token.

كود الحالة خطأ Error Description الحل
400 طلب غير صالح invalid_resource AADSTS50001: التطبيق المسمى <URI> لم يتم العثور عليه في المستأجر المسمى <TENANT-ID>. تظهر هذه الرسالة ما إذا لم يقم مسؤول المستأجر بتثبيت التطبيق أو لم يوافق عليه أي مستخدم مستأجر. ربما أرسلت طلب المصادقة إلى المستأجر الخطأ./ (Linux فقط)
400 طلب غير صالح bad_request_102 لم يتم تحديد عنوان البيانات الوصفية المطلوبة إما أن حقل عنوان الطلب Metadata مفقود من طلبك، أو تم تنسيقه بشكل غير صحيح. يجب تحديد القيمة كـ true، في جميع الأحرف الصغيرة. راجع "نموذج طلب" في قسم REST السابق للحصول على مثال.
401 غير مصرح به unknown_source مصدر غير معروف <URI> تحقق من تنسيق عنوان URI لطلب HTTP GET بشكل صحيح. يجب تحديد الجزء scheme:host/resource-path بأنه http://localhost:50342/oauth2/token. راجع "نموذج طلب" في قسم REST السابق للحصول على مثال.
invalid_request يفتقد هذا الطلب إلى معلمة مطلوبة، أو يشتمل على قيمة معلمة غير صالحة، أو يشتمل على معلمة أكثر من مرة أو تم تكوينه بشكل غير صحيح.
unauthorized_client غير مخوّل للعميل طلب رمز مميز للوصول باستخدام هذا الأسلوب. بسبب طلب على جهاز ظاهري والذي لا يحتوي على هويات مُدارة لموارد Azure تم تكوينها بشكل صحيح. راجع تكوين الهويات المُدارة لموارد Azure على جهاز ظاهري باستخدام مدخل Microsoft Azure إذا كنت بحاجة إلى مساعدة في تكوين الجهاز الظاهري.
access_denied رفض مالك المورد أو خادم التفويض الطلب.
unsupported_response_type لا يدعم خادم التخويل الحصول على رمز مميز للوصول باستخدام هذا الأسلوب.
invalid_scope النطاق المطلوب غير صالح أو غير معروف أو تالف.
500 خطأ خادم داخلي غير معروف فشل استرداد الرمز المميز من الدليل النشط. للحصول على تفاصيل، راجع السجلات في <مسار الملف> تحقق من تمكين الهويات المُدارة لموارد Azure على الجهاز الظاهري. راجع تكوين الهويات المُدارة لموارد Azure على جهاز ظاهري باستخدام مدخل Microsoft Azure إذا كنت بحاجة إلى مساعدة في تكوين الجهاز الظاهري.

تحقق أيضًا من تنسيق عنوان URI لطلب HTTP GET بشكل صحيح، لا سيما عنوان URI للمورد المحدد في سلسلة الاستعلام. راجع "نموذج الطلب" في قسم REST السابق للحصول على مثال، أو خدمات Azure التي تدعم مصادقة Microsoft Entra للحصول على قائمة بالخدمات ومعرفات الموارد الخاصة بها.

هام

  • IMDS غير مخصصة لأن يستخدمها وكيل، وتنفيذ هذا غير مدعوم. للحصول على أمثلة حول كيفية تجاوز الوكلاء، ارجع إلى عينات Azure Instance Metadata.

توجيه إعادة المحاولة

يوصى بإعادة المحاولة إذا تلقيت رمز خطأ 404 أو 429 أو 5xx (راجع معالجة الأخطاء أعلاه). إذا تلقيت خطأ 410، فهذا يشير إلى أن IMDS يمر بتحديثات وسيتوفر في 70 ثانية كحد أقصى.

تطبق حدود اختناق على عدد المكالمات التي أُجريت إلى نقطة نهاية IMDS. عند تجاوز عتبة الاختناق، تحدد نقطة نهاية IMDS أي طلبات أخرى أثناء سريان التحكم. خلال هذه الفترة، ترجع نقطة نهاية IMDS رمز حالة HTTP 429 ("طلبات كثيرة جدا")، وتفشل الطلبات.

لإعادة المحاولة، نوصي بالإستراتيجية التالية:

إستراجية إعادة محاولة الإعدادات القيم كيفية عملها
ExponentialBackoff عدد مرات إعادة المحاولة
Min back-off
Max back-off
Delta back-off
إعادة المحاولة السريعة الأولى
5
0 ثانية
60 ثانية
ثانيتين
true
محاولة 1 - تأخير 0 ثانية
محاولة 2 - تأخير ثانيتين تقريبًا
محاولة 3 - تأخير 6 ثوانٍ تقريبًا
محاولة 4 - تأخير 14 ثانية تقريبًا
محاولة 5 - تأخير 30 ثانية تقريبًا

معرفات الموارد لخدمات Azure

للحصول على قائمة بالموارد التي تدعم الهويات المُدارة لموارد Azure، راجع خدمات Azure باستخدام دعم الهويات المُدارة.

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