Egy Azure-beli virtuális gépen található Azure-erőforrások felügyelt identitásának használata hozzáférési jogkivonat beszerzéséhezHow to use managed identities for Azure resources on an Azure VM to acquire an access token

A Azure-erőforrások felügyelt identitása az Azure Active Directory egy funkciója.Managed identities for Azure resources is a feature of Azure Active Directory. Az Azure-erőforrások felügyelt identitását támogató összes Azure-szolgáltatásra a saját ütemterve vonatkozik.Each of the Azure services that support managed identities for Azure resources are subject to their own timeline. Mielőtt nekikezdene, tekintse át az erőforrásához tartozó felügyelt identitások elérhetőségi állapotát, valamint az ismert problémákat.Make sure you review the availability status of managed identities for your resource and known issues before you begin.

Az Azure-erőforrások felügyelt identitásai az Azure-szolgáltatásokat a Azure Active Directory automatikusan felügyelt identitással biztosítják.Managed identities for Azure resources provides Azure services with an automatically managed identity in Azure Active Directory. Ezt az identitást használhatja bármely olyan szolgáltatás hitelesítéséhez, amely támogatja az Azure AD-hitelesítést, és nem rendelkezik hitelesítő adatokkal a kódban.You can use this identity to authenticate to any service that supports Azure AD authentication, without having credentials in your code.

Ez a cikk különböző kódokat és parancsfájl-példákat tartalmaz a tokenek beszerzéséhez, valamint útmutatást nyújt a fontos témakörökhöz, például a jogkivonat lejáratának és a HTTP-hibáknak a kezeléséreThis article provides various code and script examples for token acquisition, as well as guidance on important topics such as handling token expiration and HTTP errors.

ElőfeltételekPrerequisites

Ha azt tervezi, hogy a jelen cikkben szereplő Azure PowerShell példákat is használja, telepítse a Azure PowerShelllegújabb verzióját.If you plan to use the Azure PowerShell examples in this article, be sure to install the latest version of Azure PowerShell.

Fontos

  • A cikkben szereplő összes mintakód/szkript azt feltételezi, hogy az ügyfél az Azure-erőforrások felügyelt identitásával rendelkező virtuális gépen fut.All sample code/script in this article assumes the client is running on a virtual machine with managed identities for Azure resources. Használja a virtuális gép "kapcsolódás" funkcióját a Azure Portal, hogy távolról csatlakozhasson a virtuális GÉPHEZ.Use the virtual machine "Connect" feature in the Azure portal, to remotely connect to your VM. A virtuális gépeken található Azure-erőforrások felügyelt identitásának engedélyezésével kapcsolatos részletekért lásd: felügyelt identitások konfigurálása egy virtuális gépen az Azure-erőforrások számára a Azure Portalvagy az egyik varianting article (POWERSHELL, CLI, sablon vagy Azure SDK használatával).For details on enabling managed identities for Azure resources on a VM, see Configure managed identities for Azure resources on a VM using the Azure portal, or one of the variant articles (using PowerShell, CLI, a template, or an Azure SDK).

Fontos

  • Az Azure-erőforrások felügyelt identitásának biztonsági határa az az erőforrás, amelyet a használ.The security boundary of managed identities for Azure resources, is the resource it's being used on. A virtuális gépen futó összes kód/szkript kérheti és beolvashatja az összes elérhető felügyelt identitás jogkivonatát.All code/scripts running on a virtual machine can request and retrieve tokens for any managed identities available on it.

ÁttekintésOverview

Az ügyfélalkalmazások felügyelt identitásokat igényelhetnek az Azure-erőforrások csak az adott erőforráshoz való hozzáféréshez használható hozzáférési jogkivonattal .A client application can request managed identities for Azure resources app-only access token for accessing a given resource. A jogkivonat az Azure-erőforrások egyszerű szolgáltatásának felügyelt identitásán alapul.The token is based on the managed identities for Azure resources service principal. Ezért nincs szükség arra, hogy az ügyfél regisztrálja magát egy hozzáférési jogkivonat beszerzéséhez a saját egyszerű szolgáltatásnév keretében.As such, there is no need for the client to register itself to obtain an access token under its own service principal. A jogkivonat alkalmas tulajdonosi jogkivonatként használni az ügyfél hitelesítő adatait igénylő szolgáltatások közötti hívásokban.The token is suitable for use as a bearer token in service-to-service calls requiring client credentials.

HivatkozásLink LeírásDescription
Token beszerzése HTTP használatávalGet a token using HTTP Az Azure Resources jogkivonat-végponthoz tartozó felügyelt identitások protokolljának részleteiProtocol details for managed identities for Azure resources token endpoint
Jogkivonat beszerzése a .NET-hez készült Microsoft. Azure. Services. AppAuthentication kódtár használatávalGet a token using the Microsoft.Azure.Services.AppAuthentication library for .NET Példa a Microsoft. Azure. Services. AppAuthentication függvénytár .NET-ügyfélről való használatáraExample of using the Microsoft.Azure.Services.AppAuthentication library from a .NET client
Token beszerzése a C használatával #Get a token using C# Példa felügyelt identitások használatára az Azure-erőforrások REST-végpontjának C#-ügyfélből való használatávalExample of using managed identities for Azure resources REST endpoint from a C# client
Token beszerzése a JavávalGet a token using Java Példa felügyelt identitások használatára az Azure-erőforrások REST-végpontja számára egy Java-ügyfélbőlExample of using managed identities for Azure resources REST endpoint from a Java client
Token beszerzése a go használatávalGet a token using Go Példa felügyelt identitások használatára az Azure-erőforrások REST-végpontján egy go-ügyfélbőlExample of using managed identities for Azure resources REST endpoint from a Go client
Token beszerzése Azure PowerShell használatávalGet a token using Azure PowerShell Példa felügyelt identitások használatára az Azure-erőforrások REST-végpontján egy PowerShell-ügyfélrőlExample of using managed identities for Azure resources REST endpoint from a PowerShell client
Token beszerzése a CURL használatávalGet a token using CURL Példa felügyelt identitások használatára az Azure-erőforrások REST-végpontján egy bash/CURL-ügyfélbőlExample of using managed identities for Azure resources REST endpoint from a Bash/CURL client
A jogkivonat gyorsítótárazásának feldolgozásaHandling token caching Útmutató a lejárt hozzáférési tokenek kezeléséreGuidance for handling expired access tokens
HibakezelésError handling Útmutató az Azure Resources jogkivonat-végponthoz tartozó felügyelt identitások által visszaadott HTTP-hibák kezeléséhezGuidance for handling HTTP errors returned from the managed identities for Azure resources token endpoint
Az Azure-szolgáltatások erőforrás-azonosítóiResource IDs for Azure services Honnan kaphat erőforrás-azonosítókat a támogatott Azure-szolgáltatásokhozWhere to get resource IDs for supported Azure services

Token beszerzése HTTP használatávalGet a token using HTTP

A hozzáférési token beszerzésének alapvető felülete a REST-alapú, így elérhetővé válik bármely, a virtuális gépen futó ügyfélalkalmazás számára, amely HTTP REST-hívásokat tesz lehetővé.The fundamental interface for acquiring an access token is based on REST, making it accessible to any client application running on the VM that can make HTTP REST calls. Ez hasonló az Azure AD programozási modellhez, kivéve, ha az ügyfél egy végpontot használ a virtuális gépen (vs egy Azure AD-végpont).This is similar to the Azure AD programming model, except the client uses an endpoint on the virtual machine (vs an Azure AD endpoint).

Példa az Azure Instance Metadata Service (IMDS) végpontjának használatával történő kérelemre (ajánlott):Sample request using the Azure Instance Metadata Service (IMDS) endpoint (recommended):

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
ElemElement LeírásDescription
GET A HTTP-művelet, amely azt jelzi, hogy a végpontról kívánja beolvasni az adatait.The HTTP verb, indicating you want to retrieve data from the endpoint. Ebben az esetben egy OAuth hozzáférési jogkivonat.In this case, an OAuth access token.
http://169.254.169.254/metadata/identity/oauth2/token Az Azure-erőforrások végpontjának felügyelt identitásai a Instance Metadata Service számára.The managed identities for Azure resources endpoint for the Instance Metadata Service.
api-version Egy lekérdezési karakterlánc paraméter, amely a IMDS-végpont API-verzióját jelzi.A query string parameter, indicating the API version for the IMDS endpoint. Használja az API 2018-02-01 -verziót vagy a nagyobbat.Please use API version 2018-02-01 or greater.
resource Egy lekérdezési karakterlánc paraméter, amely a cél erőforrás alkalmazás-azonosító URI azonosítóját jelzi.A query string parameter, indicating the App ID URI of the target resource. Ez a aud kiállított jogkivonat (célközönség) jogcímen is megjelenik.It also appears in the aud (audience) claim of the issued token. Ez a példa jogkivonatot kér a Azure Resource Manager eléréséhez, amelyhez az alkalmazás AZONOSÍTÓjának URI-ja tartozik https://management.azure.com/ .This example requests a token to access Azure Resource Manager, which has an App ID URI of https://management.azure.com/.
Metadata Egy HTTP-kérelem fejlécének mezője, amelyet az Azure-erőforrások felügyelt identitásai igényelnek a kiszolgálóoldali kérelmek hamisításának (SSRF) támadása ellen.An HTTP request header field, required by managed identities for Azure resources as a mitigation against Server Side Request Forgery (SSRF) attack. Ezt az értéket a "true" értékre kell beállítani, az összes kisbetű esetében.This value must be set to "true", in all lower case.
object_id Választható Egy lekérdezési karakterlánc paraméter, amely annak a felügyelt identitásnak a object_idét jelzi, amelyhez a tokent szeretné.(Optional) A query string parameter, indicating the object_id of the managed identity you would like the token for. Kötelező, ha a virtuális gépnek több felhasználó által hozzárendelt felügyelt identitása van.Required, if your VM has multiple user-assigned managed identities.
client_id Választható Egy lekérdezési karakterlánc paraméter, amely annak a felügyelt identitásnak a client_idét jelzi, amelyhez a tokent szeretné.(Optional) A query string parameter, indicating the client_id of the managed identity you would like the token for. Kötelező, ha a virtuális gépnek több felhasználó által hozzárendelt felügyelt identitása van.Required, if your VM has multiple user-assigned managed identities.
mi_res_id Választható Egy lekérdezési karakterlánc paraméter, amely annak a felügyelt identitásnak a mi_res_idét (Azure Resource ID) jelzi, amelyhez a tokent szeretné.(Optional) A query string parameter, indicating the mi_res_id (Azure Resource ID) of the managed identity you would like the token for. Kötelező, ha a virtuális gépnek több felhasználó által hozzárendelt felügyelt identitása van.Required, if your VM has multiple user-assigned managed identities.

Mintául szolgáló kérelem az Azure-erőforrások virtuálisgép-bővítmény végpontjának felügyelt identitások használatával (a 2019 januári verzióban való használatra tervezett):Sample request using the managed identities for Azure resources VM Extension Endpoint (planned for deprecation in January 2019):

GET http://localhost:50342/oauth2/token?resource=https%3A%2F%2Fmanagement.azure.com%2F HTTP/1.1
Metadata: true
ElemElement LeírásDescription
GET A HTTP-művelet, amely azt jelzi, hogy a végpontról kívánja beolvasni az adatait.The HTTP verb, indicating you want to retrieve data from the endpoint. Ebben az esetben egy OAuth hozzáférési jogkivonat.In this case, an OAuth access token.
http://localhost:50342/oauth2/token Az Azure-erőforrások végpontjának felügyelt identitásai, ahol a 50342 az alapértelmezett port, és konfigurálható.The managed identities for Azure resources endpoint, where 50342 is the default port and is configurable.
resource Egy lekérdezési karakterlánc paraméter, amely a cél erőforrás alkalmazás-azonosító URI azonosítóját jelzi.A query string parameter, indicating the App ID URI of the target resource. Ez a aud kiállított jogkivonat (célközönség) jogcímen is megjelenik.It also appears in the aud (audience) claim of the issued token. Ez a példa jogkivonatot kér a Azure Resource Manager eléréséhez, amelyhez az alkalmazás AZONOSÍTÓjának URI-ja tartozik https://management.azure.com/ .This example requests a token to access Azure Resource Manager, which has an App ID URI of https://management.azure.com/.
Metadata Egy HTTP-kérelem fejlécének mezője, amelyet az Azure-erőforrások felügyelt identitásai igényelnek a kiszolgálóoldali kérelmek hamisításának (SSRF) támadása ellen.An HTTP request header field, required by managed identities for Azure resources as a mitigation against Server Side Request Forgery (SSRF) attack. Ezt az értéket a "true" értékre kell beállítani, az összes kisbetű esetében.This value must be set to "true", in all lower case.
object_id Választható Egy lekérdezési karakterlánc paraméter, amely annak a felügyelt identitásnak a object_idét jelzi, amelyhez a tokent szeretné.(Optional) A query string parameter, indicating the object_id of the managed identity you would like the token for. Kötelező, ha a virtuális gépnek több felhasználó által hozzárendelt felügyelt identitása van.Required, if your VM has multiple user-assigned managed identities.
client_id Választható Egy lekérdezési karakterlánc paraméter, amely annak a felügyelt identitásnak a client_idét jelzi, amelyhez a tokent szeretné.(Optional) A query string parameter, indicating the client_id of the managed identity you would like the token for. Kötelező, ha a virtuális gépnek több felhasználó által hozzárendelt felügyelt identitása van.Required, if your VM has multiple user-assigned managed identities.

Példa a válaszra:Sample response:

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"
}
ElemElement LeírásDescription
access_token A kért hozzáférési jogkivonat.The requested access token. Biztonságos REST API hívásakor a jogkivonat a Authorization kérelem fejléc mezőjébe ágyazva "tulajdonos" tokenként van beágyazva, ami lehetővé teszi, hogy az API hitelesítse a hívót.When calling a secured REST API, the token is embedded in the Authorization request header field as a "bearer" token, allowing the API to authenticate the caller.
refresh_token Az Azure-erőforrások felügyelt identitásai nem használják.Not used by managed identities for Azure resources.
expires_in Azon másodpercek száma, ameddig a hozzáférési jogkivonat továbbra is érvényben marad, a lejárat időpontja előtt.The number of seconds the access token continues to be valid, before expiring, from time of issuance. A kiadás időpontja megtalálható a jogkivonat iat jogcímen.Time of issuance can be found in the token's iat claim.
expires_on A TimeSpan, amikor lejár a hozzáférési jogkivonat.The timespan when the access token expires. A dátum az "1970-01-01T0:0: 0Z UTC" (a jogkivonat jogcímenek felel meg) másodpercben megadott számú másodperc exp .The date is represented as the number of seconds from "1970-01-01T0:0:0Z UTC" (corresponds to the token's exp claim).
not_before A TimeSpan, ha a hozzáférési jogkivonat érvénybe lép, és el lehet fogadni.The timespan when the access token takes effect, and can be accepted. A dátum az "1970-01-01T0:0: 0Z UTC" (a jogkivonat jogcímenek felel meg) másodpercben megadott számú másodperc nbf .The date is represented as the number of seconds from "1970-01-01T0:0:0Z UTC" (corresponds to the token's nbf claim).
resource Az erőforráshoz a hozzáférési tokent kérték, amely megfelel a resource kérelem lekérdezési karakterlánc paraméterének.The resource the access token was requested for, which matches the resource query string parameter of the request.
token_type A token típusa, amely egy "tulajdonos" hozzáférési jogkivonat, ami azt jelenti, hogy az erőforrás hozzáférést biztosíthat a jogkivonat tulajdonosához.The type of token, which is a "Bearer" access token, which means the resource can give access to the bearer of this token.

Jogkivonat beszerzése a .NET-hez készült Microsoft. Azure. Services. AppAuthentication kódtár használatávalGet a token using the Microsoft.Azure.Services.AppAuthentication library for .NET

A .NET-alkalmazások és-függvények esetében az Azure-erőforrások felügyelt identitásával való együttműködés legegyszerűbb módja a Microsoft. Azure. Services. AppAuthentication csomag.For .NET applications and functions, the simplest way to work with managed identities for Azure resources is through the Microsoft.Azure.Services.AppAuthentication package. Ez a kódtár lehetővé teszi a kód helyi tesztelését a fejlesztői gépen, a Visual studióból, az Azure CLI-ből vagy Active Directory integrált hitelesítésből származó felhasználói fiók használatával.This library will also allow you to test your code locally on your development machine, using your user account from Visual Studio, the Azure CLI, or Active Directory Integrated Authentication. A könyvtár helyi fejlesztési lehetőségeiről további információt a Microsoft. Azure. Services. AppAuthentication dokumentációjábantalál.For more on local development options with this library, see the Microsoft.Azure.Services.AppAuthentication reference. Ez a szakasz bemutatja, hogyan kezdheti meg a kódtárat a kódban.This section shows you how to get started with the library in your code.

  1. Adjon hozzá hivatkozásokat a Microsoft. Azure. Services. AppAuthentication és a Microsoft. Azure. kulcstartó NuGet-csomagjaihoz az alkalmazáshoz.Add references to the Microsoft.Azure.Services.AppAuthentication and Microsoft.Azure.KeyVault NuGet packages to your application.

  2. Adja hozzá a következő kódot az alkalmazáshoz:Add the following code to your application:

    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));
    

Ha többet szeretne megtudni a Microsoft. Azure. Services. AppAuthentication és az általa közzétett műveletekről, tekintse meg a Microsoft. Azure. Services. AppAuthentication referenciáját , valamint a felügyelt identitásokkal rendelkező app Service és kulcstartót az Azure-erőforrások .net-mintában.To learn more about Microsoft.Azure.Services.AppAuthentication and the operations it exposes, see the Microsoft.Azure.Services.AppAuthentication reference and the App Service and KeyVault with managed identities for Azure resources .NET sample.

Token beszerzése a C használatával #Get a token using 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");
}

Token beszerzése a JavávalGet a token using Java

Használja ezt a JSON-függvénytárat a jogkivonatok Java használatával való lekéréséhez.Use this JSON library to retrieve a token using 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;
                }
            }
        }
    }
}

Token beszerzése a go használatávalGet a token using 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 := url.Values{}
    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)
}

Token beszerzése Azure PowerShell használatávalGet a token using Azure PowerShell

Az alábbi példa bemutatja, hogyan használhatók a felügyelt identitások az Azure-erőforrások REST-végponthoz egy PowerShell-ügyfélről a következőre:The following example demonstrates how to use the managed identities for Azure resources REST endpoint from a PowerShell client to:

  1. Hozzáférési jogkivonat beszerzése.Acquire an access token.
  2. A hozzáférési token használatával meghívhat egy Azure Resource Manager REST API, és információkat kaphat a virtuális gépről.Use the access token to call an Azure Resource Manager REST API and get information about the VM. Ügyeljen rá, hogy az előfizetés-AZONOSÍTÓját, az erőforráscsoport nevét és a virtuális gép nevét adja meg a, a, a, illetve a esetében <SUBSCRIPTION-ID> <RESOURCE-GROUP> <VM-NAME> .Be sure to substitute your subscription ID, resource group name, and virtual machine name for <SUBSCRIPTION-ID>, <RESOURCE-GROUP>, and <VM-NAME>, respectively.
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"}

Példa a hozzáférési jogkivonat elemzésére a válaszból:Example on how to parse the access token from the response:

# 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

Token beszerzése a CURL használatávalGet a token using 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

Példa a hozzáférési jogkivonat elemzésére a válaszból:Example on how to parse the access token from the response:

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

Jogkivonat-gyorsítótárazásToken caching

Míg az Azure-erőforrásokhoz használt felügyelt identitások (az Azure-erőforrások virtuálisgép-bővítményének IMDS/felügyelt identitása) a gyorsítótár-jogkivonatokat használják, javasoljuk, hogy a token-gyorsítótárazást a kódban is implementálja.While the managed identities for Azure resources subsystem being used (IMDS/managed identities for Azure resources VM Extension) does cache tokens, we also recommend to implement token caching in your code. Ennek eredményeképpen elő kell készítenie azokat a forgatókönyveket, amelyekben az erőforrás azt jelzi, hogy a jogkivonat lejárt.As a result, you should prepare for scenarios where the resource indicates that the token is expired.

Az Azure AD-ra irányuló hívásokat csak a következő esetekben lehet bevezetni:On-the-wire calls to Azure AD result only when:

  • a gyorsítótár-kihagyás oka az Azure-erőforrások alrendszerének gyorsítótárában található felügyelt identitások nem rendelkeznek jogkivonatcache miss occurs due to no token in the managed identities for Azure resources subsystem cache
  • a gyorsítótárazott jogkivonat lejártthe cached token is expired

HibakezelésError handling

Az Azure-erőforrásokhoz tartozó felügyelt identitások a HTTP-válaszüzenet fejlécének állapotkód mezőjén keresztül jelentkeznek a 4xx vagy 5xx hibák esetén:The managed identities for Azure resources endpoint signals errors via the status code field of the HTTP response message header, as either 4xx or 5xx errors:

ÁllapotkódStatus Code Hiba okaError Reason KezelésHow To Handle
404 nem található.404 Not found. A IMDS-végpont frissítése folyamatban van.IMDS endpoint is updating. Próbálja megismételni az exponenciális leállítási.Retry with Exponential Backoff. Lásd az alábbi útmutatást.See guidance below.
429 túl sok kérés.429 Too many requests. Elérte a IMDS szabályozási korlátot.IMDS Throttle limit reached. Próbálja megismételni az exponenciális leállítási.Retry with Exponential Backoff. Lásd az alábbi útmutatást.See guidance below.
4xx hiba a kérelemben.4xx Error in request. Egy vagy több kérelem paramétere helytelen volt.One or more of the request parameters was incorrect. Ne próbálkozzon újra.Do not retry. További információért tekintse meg a hiba részleteit.Examine the error details for more information. a 4xx hibák a tervezési idejű hibák.4xx errors are design-time errors.
5xx átmeneti hiba történt a szolgáltatástól.5xx Transient error from service. Az Azure-erőforrások alrendszerhez vagy Azure Active Directory felügyelt identitása átmeneti hibát adott vissza.The managed identities for Azure resources sub-system or Azure Active Directory returned a transient error. Az újrapróbálkozást legalább 1 másodperc várakozás után érdemes elvégezni.It is safe to retry after waiting for at least 1 second. Ha túl gyorsan vagy túl gyakran próbálkozik újra, a IMDS és/vagy az Azure AD-re vonatkozó korlátozási hiba léphet fel (429).If you retry too quickly or too often, IMDS and/or Azure AD may return a rate limit error (429).
timeouttimeout A IMDS-végpont frissítése folyamatban van.IMDS endpoint is updating. Próbálja megismételni az exponenciális leállítási.Retry with Exponential Backoff. Lásd az alábbi útmutatást.See guidance below.

Ha hiba történik, a megfelelő HTTP-válasz törzse JSON-t tartalmaz a hiba részleteivel:If an error occurs, the corresponding HTTP response body contains JSON with the error details:

ElemElement LeírásDescription
errorerror Hiba azonosítója.Error identifier.
error_descriptionerror_description Hiba részletes leírása.Verbose description of error. A hibákkal kapcsolatos leírások bármikor megváltoztathatók. Ne írjon olyan kódot, amely az ágakat a hiba leírásában szereplő értékek alapján írja.Error descriptions can change at any time. Do not write code that branches based on values in the error description.

HTTP-válasz referenciájaHTTP response reference

Ez a szakasz a lehetséges hibákra adott válaszokat dokumentálja.This section documents the possible error responses. A "200 OK" állapot sikeres válasz, és a hozzáférési jogkivonat a Válasz törzs JSON-ban található, a access_token elemben.A "200 OK" status is a successful response, and the access token is contained in the response body JSON, in the access_token element.

ÁllapotkódStatus code HibaError Hiba leírásaError Description MegoldásSolution
400 Hibás kérés400 Bad Request invalid_resourceinvalid_resource AADSTS50001: a nevű alkalmazás <URI> nem található a (z) nevű bérlőben <TENANT-ID> .AADSTS50001: The application named <URI> was not found in the tenant named <TENANT-ID>. Ez akkor fordulhat elő, ha az alkalmazást nem a bérlő rendszergazdája telepítette, vagy nem fogadta el egy felhasználó sem a bérlőben.This can happen if the application has not been installed by the administrator of the tenant or consented to by any user in the tenant. Lehetséges, hogy nem megfelelő bérlőnek küldték a hitelesítési kérelmet. You might have sent your authentication request to the wrong tenant.\ (Csak Linux)(Linux only)
400 Hibás kérés400 Bad Request bad_request_102bad_request_102 Nincs megadva a szükséges metaadat-fejlécRequired metadata header not specified A kérelem Metadata fejléce mező hiányzik a kérelemből, vagy helytelenül van formázva.Either the Metadata request header field is missing from your request, or is formatted incorrectly. Az értéket a következőképpen kell megadni true :, minden kisbetű esetében.The value must be specified as true, in all lower case. Példaként tekintse meg a "minta kérés" szakaszt az előző REST szakaszban.See the "Sample request" in the preceding REST section for an example.
401 Nem engedélyezett401 Unauthorized unknown_sourceunknown_source Ismeretlen forrás <URI>Unknown Source <URI> Ellenőrizze, hogy a HTTP GET kérelem URI-ja helyesen van-e formázva.Verify that your HTTP GET request URI is formatted correctly. A scheme:host/resource-path részt a következőképpen kell megadni: http://localhost:50342/oauth2/token .The scheme:host/resource-path portion must be specified as http://localhost:50342/oauth2/token. Példaként tekintse meg a "minta kérés" szakaszt az előző REST szakaszban.See the "Sample request" in the preceding REST section for an example.
invalid_requestinvalid_request A kérelemből hiányzik egy kötelező paraméter, a paraméter értéke érvénytelen, a paraméter többször is szerepel, vagy más módon helytelen formátumú.The request is missing a required parameter, includes an invalid parameter value, includes a parameter more than once, or is otherwise malformed.
unauthorized_clientunauthorized_client Az ügyfél nem jogosult hozzáférési jogkivonat igénylésére a metódus használatával.The client is not authorized to request an access token using this method. Olyan kérelem okozta, amely nem használ helyi visszacsatolást a bővítmény meghívásához, vagy olyan virtuális gépen, amely nem rendelkezik felügyelt identitásokkal az Azure-erőforrásokhoz megfelelően konfigurálva.Caused by a request that didn't use local loopback to call the extension, or on a VM that doesn't have managed identities for Azure resources configured correctly. Ha segítségre van szüksége a virtuálisgép-konfigurációval kapcsolatban, tekintse meg a felügyelt identitások konfigurálása az Azure-erőforrásokhoz a Azure Portal segítségével című témakört.See Configure managed identities for Azure resources on a VM using the Azure portal if you need assistance with VM configuration.
access_deniedaccess_denied Az erőforrás-tulajdonos vagy az engedélyezési kiszolgáló megtagadta a kérelmet.The resource owner or authorization server denied the request.
unsupported_response_typeunsupported_response_type Az engedélyezési kiszolgáló nem támogatja hozzáférési jogkivonat beszerzését ezzel a módszerrel.The authorization server does not support obtaining an access token using this method.
invalid_scopeinvalid_scope A kért hatókör érvénytelen, ismeretlen vagy helytelen formátumú.The requested scope is invalid, unknown, or malformed.
500 Belső kiszolgálóhiba500 Internal server error ismeretlenunknown Nem sikerült beolvasni a tokent az Active Directoryból.Failed to retrieve token from the Active directory. Részletekért lásd: naplók <file path>For details see logs in <file path> Ellenőrizze, hogy az Azure-erőforrásokhoz tartozó felügyelt identitások engedélyezve lettek-e a virtuális gépen.Verify that managed identities for Azure resources has been enabled on the VM. Ha segítségre van szüksége a virtuálisgép-konfigurációval kapcsolatban, tekintse meg a felügyelt identitások konfigurálása az Azure-erőforrásokhoz a Azure Portal segítségével című témakört.See Configure managed identities for Azure resources on a VM using the Azure portal if you need assistance with VM configuration.

Ellenőrizze azt is, hogy a HTTP GET kérelem URI-ja helyesen van-e formázva, különösen a lekérdezési karakterláncban megadott erőforrás-URI-t.Also verify that your HTTP GET request URI is formatted correctly, particularly the resource URI specified in the query string. Tekintse meg a "minta kérést" az előző REST szakaszban, vagy az Azure ad-hitelesítést támogató Azure-szolgáltatásokat a szolgáltatások és a hozzájuk tartozó erőforrás-azonosítók listájához.See the "Sample request" in the preceding REST section for an example, or Azure services that support Azure AD authentication for a list of services and their respective resource IDs.

Újrapróbálkozási útmutatóRetry guidance

Javasoljuk, hogy próbálkozzon újra, ha 404, 429 vagy 5xx hibakódot kap (lásd a fenti hibakódot ).It is recommended to retry if you receive a 404, 429, or 5xx error code (see Error handling above).

A szabályozás korlátozásai az IMDS-végponton végrehajtott hívások számára vonatkoznak.Throttling limits apply to the number of calls made to the IMDS endpoint. Ha túllépi a sávszélesség-szabályozási küszöbértéket, a IMDS végpontja korlátozza a további kérelmeket, amíg a szabályozás érvényben van.When the throttling threshold is exceeded, IMDS endpoint limits any further requests while the throttle is in effect. Ebben az időszakban a IMDS-végpont a 429-as HTTP-állapotkódot ("túl sok kérelem") adja vissza, és a kérések sikertelenek lesznek.During this period, the IMDS endpoint will return the HTTP status code 429 ("Too many requests"), and the requests fail.

Az újrapróbálkozáshoz a következő stratégiát javasoljuk:For retry, we recommend the following strategy:

Újrapróbálkozási stratégiaRetry strategy BeállításokSettings ÉrtékekValues MűködésHow it works
ExponentialBackoffExponentialBackoff Ismétlések számaRetry count
Visszatartás (min.)Min back-off
Visszatartás (max.)Max back-off
Visszatartás (változás)Delta back-off
Első gyors újrapróbálkozásFirst fast retry
55
0 másodperc0 sec
60 másodperc60 sec
2 másodperc2 sec
hamisfalse
1. kísérlet – 0 mp. késleltetésAttempt 1 - delay 0 sec
2. kísérlet – kb. 2 mp. késleltetésAttempt 2 - delay ~2 sec
3. kísérlet – kb. 6 mp. késleltetésAttempt 3 - delay ~6 sec
4. kísérlet – kb. 14 mp. késleltetésAttempt 4 - delay ~14 sec
5. kísérlet – kb. 30 mp. késleltetésAttempt 5 - delay ~30 sec

Az Azure-szolgáltatások erőforrás-azonosítóiResource IDs for Azure services

Tekintse meg az Azure ad- hitelesítést támogató Azure-szolgáltatásokat az Azure ad-t támogató erőforrások listájáért, valamint az Azure-erőforrások felügyelt identitásokkal való tesztelését, valamint a hozzájuk tartozó erőforrás-azonosítókat.See Azure services that support Azure AD authentication for a list of resources that support Azure AD and have been tested with managed identities for Azure resources, and their respective resource IDs.

További lépésekNext steps