Verwenden verwalteter Identitäten für App Service und Azure FunctionsHow to use managed identities for App Service and Azure Functions

Wichtig

Verwaltete Identitäten für App Service und Azure Functions verhalten sich nicht wie erwartet, wenn Ihre App abonnement- bzw. mandantenübergreifend migriert wird.Managed identities for App Service and Azure Functions will not behave as expected if your app is migrated across subscriptions/tenants. Die App muss eine neue Identität abrufen. Zu diesem Zweck kann die Funktion deaktiviert und dann erneut aktiviert werden.The app will need to obtain a new identity, which can be done by disabling and re-enabling the feature. Weitere Informationen finden Sie im Abschnitt Entfernen einer Identität weiter unten.See Removing an identity below. Für nachgeschaltete Ressourcen müssen außerdem die Zugriffsrichtlinien für die Verwendung der neuen Identität aktualisiert werden.Downstream resources will also need to have access policies updated to use the new identity.

In diesem Thema erfahren Sie, wie eine verwaltete Identität für App Service- und Azure Functions-Anwendungen erstellt und für den Zugriff auf andere Ressourcen verwendet wird.This topic shows you how to create a managed identity for App Service and Azure Functions applications and how to use it to access other resources. Durch eine verwaltete Entität aus Azure Active Directory kann Ihre App mühelos auf andere durch AAD geschützte Ressourcen wie Azure Key Vault zugreifen.A managed identity from Azure Active Directory allows your app to easily access other AAD-protected resources such as Azure Key Vault. Da die Identität von der Azure-Plattform verwaltet wird, müssen Sie keine Geheimnisse bereitstellen oder rotieren.The identity is managed by the Azure platform and does not require you to provision or rotate any secrets. Weitere Informationen zu verwalteten Identitäten in AAD finden Sie unter Verwaltete Identitäten für Azure-Ressourcen.For more about managed identities in AAD, see Managed identities for Azure resources.

Ihrer Anwendung können zwei Arten von Identitäten zugewiesen werden:Your application can be granted two types of identities:

  • Eine systemseitig zugewiesene Identität ist an Ihre Anwendung gebunden und wird gelöscht, wenn Ihre App gelöscht wird.A system-assigned identity is tied to your application and is deleted if your app is deleted. Eine App kann nur über eine systemseitig zugewiesene Identität verfügen.An app can only have one system-assigned identity.
  • Eine benutzerseitig zugewiesene Identität ist eine eigenständige Azure-Ressource, die Ihrer App zugewiesen werden kann.A user-assigned identity is a standalone Azure resource which can be assigned to your app. Eine App kann über mehrere benutzerseitig zugewiesene Identitäten verfügen.An app can have multiple user-assigned identities.

Hinzufügen einer systemseitig zugewiesenen IdentitätAdding a system-assigned identity

Für die Erstellung einer App mit einer systemseitig zugewiesenen Identität muss eine zusätzliche Eigenschaft für die Anwendung festgelegt werden.Creating an app with a system-assigned identity requires an additional property to be set on the application.

Verwenden des Azure-PortalsUsing the Azure portal

Um eine verwaltete Entität im Portal einzurichten, erstellen Sie wie gewohnt zuerst eine Anwendung und aktivieren dann das Feature.To set up a managed identity in the portal, you will first create an application as normal and then enable the feature.

  1. Erstellen Sie wie gewohnt eine App im Portal.Create an app in the portal as you normally would. Navigieren Sie im Portal zu dieser App.Navigate to it in the portal.

  2. Wenn Sie eine Funktionen-App verwenden, navigieren Sie zu Plattformfeatures.If using a function app, navigate to Platform features. Scrollen Sie bei anderen App-Typen in der linken Navigationsleiste nach unten zur Gruppe Einstellungen.For other app types, scroll down to the Settings group in the left navigation.

  3. Wählen Sie Verwaltete Identität aus.Select Managed identity.

  4. Ändern Sie auf der Registerkarte Systemseitig zugewiesen den Status in Ein.Within the System assigned tab, switch Status to On. Klicken Sie auf Speichern.Click Save.

Verwaltete Identität in App Service

Verwenden der Azure-BefehlszeilenschnittstelleUsing the Azure CLI

Um mithilfe der Azure CLI eine verwaltete Entität einzurichten, müssen Sie für eine vorhandene Anwendung den Befehl az webapp identity assign ausführen.To set up a managed identity using the Azure CLI, you will need to use the az webapp identity assign command against an existing application. Für die Ausführung der Beispiele in diesem Abschnitt gibt es drei Optionen:You have three options for running the examples in this section:

  • Verwenden Sie Azure Cloud Shell über das Azure-Portal.Use Azure Cloud Shell from the Azure portal.
  • Verwenden Sie die eingebettete Azure Cloud Shell, indem Sie die Schaltfläche „Ausprobieren“ in der oberen rechten Ecke der unten aufgeführten Codeblocks verwenden.Use the embedded Azure Cloud Shell via the "Try It" button, located in the top right corner of each code block below.
  • Installieren Sie die neueste Version der Azure CLI (2.0.31 oder höher), wenn Sie lieber eine lokale CLI-Konsole verwenden möchten.Install the latest version of Azure CLI (2.0.31 or later) if you prefer to use a local CLI console.

In den folgenden Schritten werden Sie durch das Erstellen einer Web-App und das Zuweisen einer Identität zur App mithilfe der CLI geleitet:The following steps will walk you through creating a web app and assigning it an identity using the CLI:

  1. Melden Sie sich bei Verwendung der Azure CLI in einer lokalen Konsole zunächst mit az login bei Azure an.If you're using the Azure CLI in a local console, first sign in to Azure using az login. Verwenden Sie ein Konto, das dem Azure-Abonnement zugeordnet ist, unter dem Sie die Anwendung bereitstellen möchten:Use an account that is associated with the Azure subscription under which you would like to deploy the application:

    az login
    
  2. Erstellen Sie eine Webanwendung mithilfe der CLI.Create a web application using the CLI. Weitere Beispiele zum Verwenden der CLI mit App Service finden Sie unter Azure CLI-Beispiele:For more examples of how to use the CLI with App Service, see App Service CLI samples:

    az group create --name myResourceGroup --location westus
    az appservice plan create --name myPlan --resource-group myResourceGroup --sku S1
    az webapp create --name myApp --resource-group myResourceGroup --plan myPlan
    
  3. Führen Sie den identity assign Befehl aus, um die Identität für diese Anwendung zu erstellen:Run the identity assign command to create the identity for this application:

    az webapp identity assign --name myApp --resource-group myResourceGroup
    

Verwenden von Azure PowerShellUsing Azure PowerShell

Hinweis

Dieser Artikel wurde aktualisiert und beinhaltet jetzt das neue Az-Modul von Azure PowerShell.This article has been updated to use the new Azure PowerShell Az module. Sie können das AzureRM-Modul weiterhin verwenden, das bis mindestens Dezember 2020 weiterhin Fehlerbehebungen erhält.You can still use the AzureRM module, which will continue to receive bug fixes until at least December 2020. Weitere Informationen zum neuen Az-Modul und zur Kompatibilität mit AzureRM finden Sie unter Introducing the new Azure PowerShell Az module (Einführung in das neue Az-Modul von Azure PowerShell).To learn more about the new Az module and AzureRM compatibility, see Introducing the new Azure PowerShell Az module. Anweisungen zur Installation des Az-Moduls finden Sie unter Install Azure PowerShell (Installieren von Azure PowerShell).For Az module installation instructions, see Install Azure PowerShell.

In den folgenden Schritten werden Sie durch das Erstellen einer Web-App und das Zuweisen einer Identität zur App mithilfe von Azure PowerShell geleitet:The following steps will walk you through creating a web app and assigning it an identity using Azure PowerShell:

  1. Installieren Sie bei Bedarf Azure PowerShell anhand der Anleitung im Azure PowerShell-Handbuch, und führen Sie dann Login-AzAccount aus, um eine Verbindung mit Azure herzustellen.If needed, install the Azure PowerShell using the instruction found in the Azure PowerShell guide, and then run Login-AzAccount to create a connection with Azure.

  2. Erstellen Sie eine Webanwendung mithilfe von Azure PowerShell.Create a web application using Azure PowerShell. Weitere Beispiele zum Verwenden von Azure PowerShell mit App Service finden Sie unter Azure PowerShell-Beispiele:For more examples of how to use Azure PowerShell with App Service, see App Service PowerShell samples:

    # Create a resource group.
    New-AzResourceGroup -Name myResourceGroup -Location $location
    
    # Create an App Service plan in Free tier.
    New-AzAppServicePlan -Name $webappname -Location $location -ResourceGroupName myResourceGroup -Tier Free
    
    # Create a web app.
    New-AzWebApp -Name $webappname -Location $location -AppServicePlan $webappname -ResourceGroupName myResourceGroup
    
  3. Führen Sie den Set-AzWebApp -AssignIdentity Befehl aus, um die Identität für diese Anwendung zu erstellen:Run the Set-AzWebApp -AssignIdentity command to create the identity for this application:

    Set-AzWebApp -AssignIdentity $true -Name $webappname -ResourceGroupName myResourceGroup 
    

Verwenden einer Azure Resource Manager-VorlageUsing an Azure Resource Manager template

Mithilfe einer Azure Resource Manager-Vorlage kann die Bereitstellung Ihrer Azure-Ressourcen automatisiert werden.An Azure Resource Manager template can be used to automate deployment of your Azure resources. Weitere Informationen zum Bereitstellen von App Service und Azure Functions finden Sie unter Automatisieren der Ressourcenbereitstellung in App Service und Automatisieren der Ressourcenbereitstellung in Azure Functions.To learn more about deploying to App Service and Functions, see Automating resource deployment in App Service and Automating resource deployment in Azure Functions.

Ressourcen vom Typ Microsoft.Web/sites können mit einer Identität erstellt werden, indem die folgende Eigenschaft in der Ressourcendefinition eingeschlossen wird:Any resource of type Microsoft.Web/sites can be created with an identity by including the following property in the resource definition:

"identity": {
    "type": "SystemAssigned"
}    

Hinweis

Eine Anwendung kann gleichzeitig sowohl über systemseitig als auch über benutzerseitig zugewiesene Identitäten verfügen.An application can have both system-assigned and user-assigned identities at the same time. In diesem Fall erhält die type-Eigenschaft den Wert SystemAssigned,UserAssigned.In this case, the type property would be SystemAssigned,UserAssigned

Durch das Hinzufügen des systemseitig zugewiesenen Typs wird Azure angewiesen, die Identität für Ihre Anwendung zu erstellen und zu verwalten.Adding the system-assigned type tells Azure to create and manage the identity for your application.

Eine Web-App kann beispielsweise wie folgt aussehen:For example, a web app might look like the following:

{
    "apiVersion": "2016-08-01",
    "type": "Microsoft.Web/sites",
    "name": "[variables('appName')]",
    "location": "[resourceGroup().location]",
    "identity": {
        "type": "SystemAssigned"
    },
    "properties": {
        "name": "[variables('appName')]",
        "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('hostingPlanName'))]",
        "hostingEnvironment": "",
        "clientAffinityEnabled": false,
        "alwaysOn": true
    },
    "dependsOn": [
        "[resourceId('Microsoft.Web/serverfarms', variables('hostingPlanName'))]"
    ]
}

Wenn die Website erstellt wurde, weist sie folgende zusätzliche Eigenschaften auf:When the site is created, it has the following additional properties:

"identity": {
    "type": "SystemAssigned",
    "tenantId": "<TENANTID>",
    "principalId": "<PRINCIPALID>"
}

Hierbei werden <TENANTID> und <PRINCIPALID> durch GUIDs ersetzt.Where <TENANTID> and <PRINCIPALID> are replaced with GUIDs. Die Eigenschaft „tenantId“ kennzeichnet, zu welchem AAD-Mandanten die Identität gehört.The tenantId property identifies what AAD tenant the identity belongs to. Die Eigenschaft „principalId“ ist ein eindeutiger Bezeichner für die neue Identität der Anwendung.The principalId is a unique identifier for the application's new identity. In AAD weist der Dienstprinzipal denselben Namen auf, den Sie für Ihre App Service- oder Azure Functions-Instanz vergeben haben.Within AAD, the service principal has the same name that you gave to your App Service or Azure Functions instance.

Hinzufügen einer benutzerseitig zugewiesenen IdentitätAdding a user-assigned identity

Für das Erstellen einer App mit einer benutzerseitig zugewiesenen Identität müssen Sie die Identität erstellen und dann den Ressourcenbezeichner der Identität zu Ihrer App-Konfiguration hinzufügen.Creating an app with a user-assigned identity requires that you create the identity and then add its resource identifier to your app config.

Verwenden des Azure-PortalsUsing the Azure portal

Zunächst müssen Sie eine Ressource für eine benutzerseitig zugewiesene Identität erstellen.First, you'll need to create a user-assigned identity resource.

  1. Folgen Sie zum Erstellen einer benutzerseitig verwalteten Identitätsressource diesen Anweisungen.Create a user-assigned managed identity resource according to these instructions.

  2. Erstellen Sie wie gewohnt eine App im Portal.Create an app in the portal as you normally would. Navigieren Sie im Portal zu dieser App.Navigate to it in the portal.

  3. Wenn Sie eine Funktionen-App verwenden, navigieren Sie zu Plattformfeatures.If using a function app, navigate to Platform features. Scrollen Sie bei anderen App-Typen in der linken Navigationsleiste nach unten zur Gruppe Einstellungen.For other app types, scroll down to the Settings group in the left navigation.

  4. Wählen Sie Verwaltete Identität aus.Select Managed identity.

  5. Klicken Sie auf der Registerkarte Benutzerseitig zugewiesen auf Hinzufügen.Within the User assigned tab, click Add.

  6. Suchen Sie nach der zuvor erstellten Identität, und wählen Sie sie aus.Search for the identity you created earlier and select it. Klicken Sie auf Hinzufügen.Click Add.

Verwaltete Identität in App Service

Verwenden einer Azure Resource Manager-VorlageUsing an Azure Resource Manager template

Mithilfe einer Azure Resource Manager-Vorlage kann die Bereitstellung Ihrer Azure-Ressourcen automatisiert werden.An Azure Resource Manager template can be used to automate deployment of your Azure resources. Weitere Informationen zum Bereitstellen von App Service und Azure Functions finden Sie unter Automatisieren der Ressourcenbereitstellung in App Service und Automatisieren der Ressourcenbereitstellung in Azure Functions.To learn more about deploying to App Service and Functions, see Automating resource deployment in App Service and Automating resource deployment in Azure Functions.

Ressourcen vom Typ Microsoft.Web/sites können mit einer Identität erstellt werden, indem den folgenden Block in die Ressourcendefinition einschließen. Ersetzen Sie hierbei <RESOURCEID> durch die Ressourcen-ID der gewünschten Identität:Any resource of type Microsoft.Web/sites can be created with an identity by including the following block in the resource definition, replacing <RESOURCEID> with the resource ID of the desired identity:

"identity": {
    "type": "UserAssigned",
    "userAssignedIdentities": {
        "<RESOURCEID>": {}
    }
}    

Hinweis

Eine Anwendung kann gleichzeitig sowohl über systemseitig als auch über benutzerseitig zugewiesene Identitäten verfügen.An application can have both system-assigned and user-assigned identities at the same time. In diesem Fall erhält die type-Eigenschaft den Wert SystemAssigned,UserAssigned.In this case, the type property would be SystemAssigned,UserAssigned

Durch das Hinzufügen des benutzerseitig zugewiesenen Typs wird Azure angewiesen, die Identität für Ihre Anwendung zu erstellen und zu verwalten.Adding the user-assigned type and a cotells Azure to create and manage the identity for your application.

Eine Web-App kann beispielsweise wie folgt aussehen:For example, a web app might look like the following:

{
    "apiVersion": "2016-08-01",
    "type": "Microsoft.Web/sites",
    "name": "[variables('appName')]",
    "location": "[resourceGroup().location]",
    "identity": {
        "type": "UserAssigned",
        "userAssignedIdentities": {
            "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', variables('identityName'))]": {}
        }
    },
    "properties": {
        "name": "[variables('appName')]",
        "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('hostingPlanName'))]",
        "hostingEnvironment": "",
        "clientAffinityEnabled": false,
        "alwaysOn": true
    },
    "dependsOn": [
        "[resourceId('Microsoft.Web/serverfarms', variables('hostingPlanName'))]",
        "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', variables('identityName'))]"
    ]
}

Wenn die Website erstellt wurde, weist sie folgende zusätzliche Eigenschaften auf:When the site is created, it has the following additional properties:

"identity": {
    "type": "UserAssigned",
    "userAssignedIdentities": {
        "<RESOURCEID>": {
            "principalId": "<PRINCIPALID>",
            "clientId": "<CLIENTID>"
        }
    }
}

Hierbei werden <PRINCIPALID> und <CLIENTID> durch GUIDs ersetzt.Where <PRINCIPALID> and <CLIENTID> are replaced with GUIDs. „principalId“ ist ein eindeutiger Bezeichner für die Identität, der bei der AAD-Verwaltung verwendet wird.The principalId is a unique identifier for the identity which is used for AAD administration. „clientId“ ist ein eindeutiger Bezeichner für die neue Identität der Anwendung, der bei Runtimeaufrufen angibt, welche Identität verwendet werden soll.The clientId is a unique identifier for the application's new identity that is used for specifying which identity to use during runtime calls.

Abrufen von Tokens für Azure-RessourcenObtaining tokens for Azure resources

Eine App kann mithilfe ihrer Identität Tokens für andere Ressourcen abrufen, die durch AAD wie Azure Key Vault geschützt sind.An app can use its identity to get tokens to other resources protected by AAD, such as Azure Key Vault. Diese Tokens stellen die Anwendung dar, die auf die Ressource zugreift, nicht einen bestimmten Benutzer der Anwendung.These tokens represent the application accessing the resource, and not any specific user of the application.

Wichtig

Sie müssen die Zielressource möglicherweise für den Zugriff über die Anwendung konfigurieren.You may need to configure the target resource to allow access from your application. Wenn Sie beispielsweise ein Token für Key Vault anfordern, müssen Sie sicherstellen, dass Sie eine Zugriffsrichtlinie hinzugefügt haben, die die Identität Ihrer Anwendung enthält.For example, if you request a token to Key Vault, you need to make sure you have added an access policy that includes your application's identity. Andernfalls werden Ihre Aufrufe von Key Vault abgelehnt, auch wenn diese das Token enthalten.Otherwise, your calls to Key Vault will be rejected, even if they include the token. Informationen zu den Ressourcen, die Azure Active Directory-Token unterstützen, finden Sie unter Azure-Dienste, die die Azure AD-Authentifizierung unterstützen.To learn more about which resources support Azure Active Directory tokens, see Azure services that support Azure AD authentication.

Zum Abrufen eines Tokens in App Service und Azure Functions ist ein einfaches REST-Protokoll verfügbar.There is a simple REST protocol for obtaining a token in App Service and Azure Functions. Für .NET-Anwendungen bietet die Microsoft.Azure.Services.AppAuthentication-Bibliothek eine Abstraktion über dieses Protokoll und unterstützt eine lokale Entwicklungsumgebung.For .NET applications, the Microsoft.Azure.Services.AppAuthentication library provides an abstraction over this protocol and supports a local development experience.

Verwendung der Microsoft.Azure.Services.AppAuthentication-Bibliothek für .NETUsing the Microsoft.Azure.Services.AppAuthentication library for .NET

Bei .NET-Anwendungen und -Funktionen stellt das Microsoft.Azure.Services.AppAuthentication-Paket die einfachste Methode für das Arbeiten mit einer verwalteten Identität dar.For .NET applications and functions, the simplest way to work with a managed identity is through the Microsoft.Azure.Services.AppAuthentication package. Mithilfe dieser Bibliothek können Sie zudem Ihren Code lokal auf dem Entwicklungscomputer testen. Hierzu verwenden Sie Ihr Benutzerkonto aus Visual Studio, aus der Azure CLI oder der integrierten Active Directory-Authentifizierung.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. Weitere Informationen zu Optionen für die lokale Entwicklung mit dieser Bibliothek finden Sie in der Microsoft.Azure.Services.AppAuthentication-Referenz.For more on local development options with this library, see the Microsoft.Azure.Services.AppAuthentication reference. In diesem Abschnitt werden die ersten Schritte mit der Bibliothek in Ihrem Code erläutert.This section shows you how to get started with the library in your code.

  1. Fügen Sie Ihrer Anwendung Verweise auf Microsoft.Azure.Services.AppAuthentication und alle weiteren erforderlichen NuGet-Pakete hinzu.Add references to the Microsoft.Azure.Services.AppAuthentication and any other necessary NuGet packages to your application. Im folgenden Beispiel wird auch Microsoft.Azure.KeyVault verwendet.The below example also uses Microsoft.Azure.KeyVault.

  2. Fügen Sie Ihrer Anwendung den folgenden Code hinzu, und ändern Sie ihn so, dass er die richtige Ressource als Ziel verwendet.Add the following code to your application, modifying to target the correct resource. Dieses Beispiel zeigt zwei Möglichkeiten für die Arbeit mit Azure Key Vault:This example shows two ways to work with Azure Key Vault:

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

Weitere Informationen zu Microsoft.Azure.Services.AppAuthentication und den zugehörigen Vorgängen finden Sie in der Microsoft.Azure.Services.AppAuthentication-Referenz und im Beispiel zu App Service und KeyVault mit MSI .NET.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 MSI .NET sample.

Verwenden des Azure SDK für JavaUsing the Azure SDK for Java

Für Java-Anwendungen und -Funktionen besteht die einfachste Methode für die Arbeit mit einer verwalteten Identität in der Verwendung des Azure SDK für Java.For Java applications and functions, the simplest way to work with a managed identity is through the Azure SDK for Java. In diesem Abschnitt werden die ersten Schritte mit der Bibliothek in Ihrem Code erläutert.This section shows you how to get started with the library in your code.

  1. Fügen Sie einen Verweis zur Azure SDK-Bibliothek hinzu.Add a reference to the Azure SDK library. Bei Maven-Projekten können Sie den folgenden Codeausschnitt zum dependencies-Abschnitt der POM-Datei des Projekts hinzufügen:For Maven projects, you might add this snippet to the dependencies section of the project's POM file:
<dependency>
    <groupId>com.microsoft.azure</groupId>
    <artifactId>azure</artifactId>
    <version>1.23.0</version>
</dependency>
  1. Verwenden Sie das AppServiceMSICredentials-Objekt für die Authentifizierung.Use the AppServiceMSICredentials object for authentication. In diesem Beispiel wird gezeigt, wie dieser Mechanismus mit Azure Key Vault verwendet werden kann:This example shows how this mechanism may be used for working with Azure Key Vault:
import com.microsoft.azure.AzureEnvironment;
import com.microsoft.azure.management.Azure;
import com.microsoft.azure.management.keyvault.Vault
//...
Azure azure = Azure.authenticate(new AppServiceMSICredentials(AzureEnvironment.AZURE))
        .withSubscription(subscriptionId);
Vault myKeyVault = azure.vaults().getByResourceGroup(resourceGroup, keyvaultName);

Verwenden des REST-ProtokollsUsing the REST protocol

Für eine App mit einer verwalteten Identität sind zwei Umgebungsvariablen definiert:An app with a managed identity has two environment variables defined:

  • MSI_ENDPOINT: Die URL zum lokalen TokendienstMSI_ENDPOINT - the URL to the local token service.
  • MSI_SECRET: Ein Header, der als Maßnahme gegen SSRF-Angriffe (Server-Side Request Forgery) verwendet wird.MSI_SECRET - a header used to help mitigate server-side request forgery (SSRF) attacks. Der Wert wird von der Plattform rotiert.The value is rotated by the platform.

Bei der Variable MSI_ENDPOINT handelt es sich um eine lokale URL, über die Ihre App Tokens anfordern kann.The MSI_ENDPOINT is a local URL from which your app can request tokens. Um ein Token für eine Ressource abzurufen, senden Sie eine HTTP-GET-Anforderung mit folgenden Parametern an diesen Endpunkt:To get a token for a resource, make an HTTP GET request to this endpoint, including the following parameters:

ParameternameParameter name Geben Sie inIn BESCHREIBUNGDescription
resourceresource AbfragenQuery Der AAD-Ressourcen-URI der Ressource, für die ein Token abgerufen werden soll.The AAD resource URI of the resource for which a token should be obtained. Dies kann einer der Azure-Dienste, die die Azure AD-Authentifizierung unterstützen, oder ein anderer Ressourcen-URI sein.This could be one of the Azure services that support Azure AD authentication or any other resource URI.
api-versionapi-version AbfragenQuery Die Version der zu verwendenden Token-API.The version of the token API to be used. Die einzige derzeit unterstützte Version lautet „2017-09-01“."2017-09-01" is currently the only version supported.
secretsecret HeaderHeader Der Wert der Umgebungsvariable „MSI_SECRET“.The value of the MSI_SECRET environment variable. Dieser Header wird als Maßnahme gegen SSRF-Angriffe (Server-Side Request Forgery) verwendet.This header is used to help mitigate server-side request forgery (SSRF) attacks.
clientidclientid AbfragenQuery (Optional, sofern nicht benutzerseitig zugewiesene Identität) Die ID der benutzerseitig zugewiesenen Identität, die verwendet werden soll.(Optional unless for user-assigned) The ID of the user-assigned identity to be used. Sofern nicht angegeben, wird die systemseitig zugewiesene Identität verwendet.If omitted, the system-assigned identity is used.

Wichtig

Wenn Sie Token für vom benutzerseitig zugewiesene Identitäten abrufen möchten, müssen Sie die clientid-Eigenschaft einbinden.If you are attempting to obtain tokens for user-assigned identities, you must include the clientid property. Andernfalls versucht der Tokendienst, ein Token für eine vom System zugewiesene Identität abzurufen, die möglicherweise nicht vorhanden ist.Otherwise the token service will attempt to obtain a token for a system-assigned identity, which may or may not exist.

Eine erfolgreiche 200 OK-Antwort enthält einen JSON-Text mit folgenden Eigenschaften:A successful 200 OK response includes a JSON body with the following properties:

EigenschaftennameProperty name BESCHREIBUNGDescription
access_tokenaccess_token Das angeforderte Zugriffstoken.The requested access token. Der aufrufende Webdienst kann dieses Token verwenden, um die Authentifizierung für den empfangenden Webdienst durchzuführen.The calling web service can use this token to authenticate to the receiving web service.
expires_onexpires_on Die Uhrzeit, zu der das Zugriffstoken abläuft.The time when the access token expires. Das Datum wird als Anzahl der Sekunden ab 1970-01-01T0:0:0Z UTC bis zur Ablaufzeit dargestellt.The date is represented as the number of seconds from 1970-01-01T0:0:0Z UTC until the expiration time. Dieser Wert wird verwendet, um die Lebensdauer von zwischengespeicherten Token zu bestimmen.This value is used to determine the lifetime of cached tokens.
resourceresource Der App-ID-URI des empfangenden Webdiensts.The App ID URI of the receiving web service.
token_typetoken_type Gibt den Wert des Tokentyps an.Indicates the token type value. Bearertoken ist der einzige Typ, den Azure AD unterstützt.The only type that Azure AD supports is Bearer. Weitere Informationen zu Bearertoken finden Sie unter OAuth 2.0-Autorisierungsframework: Verwendung von Bearertoken (RFC 6750).For more information about bearer tokens, see The OAuth 2.0 Authorization Framework: Bearer Token Usage (RFC 6750).

Diese Antwort ist mit der Antwort für die Zugriffstokenanforderung zwischen zwei AAD-Diensten identisch.This response is the same as the response for the AAD service-to-service access token request.

Hinweis

Beim ersten Starten des Prozesses werden Umgebungsvariablen eingerichtet, sodass Sie nach der Aktivierung der verwalteten Identität für Ihre Anwendung möglicherweise die Anwendung neu starten oder ihren Code erneut bereitstellen müssen, bevor MSI_ENDPOINT und MSI_SECRET für Ihren Code verfügbar sind.Environment variables are set up when the process first starts, so after enabling a managed identity for your application, you may need to restart your application, or redeploy its code, before MSI_ENDPOINT and MSI_SECRET are available to your code.

Beispiele für REST-ProtokolleREST protocol examples

Eine Beispielanforderung könnte folgendermaßen aussehen:An example request might look like the following:

GET /MSI/token?resource=https://vault.azure.net&api-version=2017-09-01 HTTP/1.1
Host: localhost:4141
Secret: 853b9a84-5bfa-4b22-a3f3-0b9a43d9ad8a

Eine Beispielantwort könnte folgendermaßen aussehen:And a sample response might look like the following:

HTTP/1.1 200 OK
Content-Type: application/json

{
    "access_token": "eyJ0eXAi…",
    "expires_on": "09/14/2017 00:00:00 PM +00:00",
    "resource": "https://vault.azure.net",
    "token_type": "Bearer"
}

CodebeispieleCode examples

So erstellen Sie diese Anforderung in C#:To make this request in C#:

public static async Task<HttpResponseMessage> GetToken(string resource, string apiversion)  {
    HttpClient client = new HttpClient();
    client.DefaultRequestHeaders.Add("Secret", Environment.GetEnvironmentVariable("MSI_SECRET"));
    return await client.GetAsync(String.Format("{0}/?resource={1}&api-version={2}", Environment.GetEnvironmentVariable("MSI_ENDPOINT"), resource, apiversion));
}

Tipp

Für .NET-Sprachen können Sie auch Microsoft.Azure.Services.AppAuthentication verwenden, statt diese Anforderung selbst zu entwerfen.For .NET languages, you can also use Microsoft.Azure.Services.AppAuthentication instead of crafting this request yourself.

Gehen Sie in Node.js folgendermaßen vor:In Node.JS:

const rp = require('request-promise');
const getToken = function(resource, apiver, cb) {
    let options = {
        uri: `${process.env["MSI_ENDPOINT"]}/?resource=${resource}&api-version=${apiver}`,
        headers: {
            'Secret': process.env["MSI_SECRET"]
        }
    };
    rp(options)
        .then(cb);
}

In Python:In Python:

import os
import requests

msi_endpoint = os.environ["MSI_ENDPOINT"]
msi_secret = os.environ["MSI_SECRET"]

def get_bearer_token(resource_uri, token_api_version):
    token_auth_uri = f"{msi_endpoint}?resource={resource_uri}&api-version={token_api_version}"
    head_msi = {'Secret':msi_secret}

    resp = requests.get(token_auth_uri, headers=head_msi)
    access_token = resp.json()['access_token']

    return access_token

Gehen Sie in PowerShell folgendermaßen vor:In PowerShell:

$apiVersion = "2017-09-01"
$resourceURI = "https://<AAD-resource-URI-for-resource-to-obtain-token>"
$tokenAuthURI = $env:MSI_ENDPOINT + "?resource=$resourceURI&api-version=$apiVersion"
$tokenResponse = Invoke-RestMethod -Method Get -Headers @{"Secret"="$env:MSI_SECRET"} -Uri $tokenAuthURI
$accessToken = $tokenResponse.access_token

Entfernen einer IdentitätRemoving an identity

Eine systemseitig zugewiesene Identität kann entfernt werden, indem das Feature über das Portal, PowerShell oder die Befehlszeilenschnittstelle auf die gleiche Weise wie bei der Erstellung deaktiviert wird.A system-assigned identity can be removed by disabling the feature using the portal, PowerShell, or CLI in the same way that it was created. Benutzerseitig zugewiesene Identitäten können einzeln entfernt werden.User-assigned identities can be removed individually. Um alle Identitäten zu entfernen, legen Sie im REST/ARM-Vorlagenprotokoll den Typ auf „None“ fest:To remove all identities, in the REST/ARM template protocol, this is done by setting the type to "None":

"identity": {
    "type": "None"
}

Bei dieser Methode zum Entfernen einer systemseitig zugewiesenen Identität wird diese auch aus AAD gelöscht.Removing a system-assigned identity in this way will also delete it from AAD. Systemseitig zugewiesene Identitäten werden automatisch aus AAD entfernt, wenn die App-Ressource gelöscht wird.System-assigned identities are also automatically removed from AAD when the app resource is deleted.

Hinweis

Es gibt auch eine Anwendungseinstellung, die festgelegt werden kann (WEBSITE_DISABLE_MSI). Hierdurch wird nur der lokale Tokendienst deaktiviert.There is also an application setting that can be set, WEBSITE_DISABLE_MSI, which just disables the local token service. Die Identität bleibt jedoch erhalten, und in den Tools wird die verwaltete Identität weiterhin als „Ein“ oder „Aktiviert“ angezeigt.However, it leaves the identity in place, and tooling will still show the managed identity as "on" or "enabled." Daher wird die Verwendung dieser Einstellung nicht empfohlen.As a result, use of this setting is not recommended.

Nächste SchritteNext steps