Guide pratique pour utiliser des identités managées pour App Service et Azure FunctionsHow to use managed identities for App Service and Azure Functions

Important

Si vous migrez votre application entre différents abonnements/locataires, les identités managées pour App Service et Azure Functions présentent un comportement anormal.Managed identities for App Service and Azure Functions will not behave as expected if your app is migrated across subscriptions/tenants. L’application devra obtenir une nouvelle identité, ce qui peut être effectué par la désactivation et la réactivation de la fonctionnalité.The app will need to obtain a new identity, which can be done by disabling and re-enabling the feature. Consultez Suppression d’une identité ci-dessous.See Removing an identity below. Les ressources en aval devront également disposer de stratégies d’accès mises à jour pour utiliser la nouvelle identité.Downstream resources will also need to have access policies updated to use the new identity.

Cette rubrique vous montre comment créer une identité managée pour les applications App Service et Azure Functions et comment l’utiliser pour accéder à d’autres ressources.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. Une identité managée issue d’Azure Active Directory permet à votre application d’accéder facilement aux autres ressources protégées par AAD telles qu’Azure Key Vault.A managed identity from Azure Active Directory allows your app to easily access other AAD-protected resources such as Azure Key Vault. Managée par la plateforme Azure, l’identité ne nécessite pas que vous approvisionniez ou permutiez de secrets.The identity is managed by the Azure platform and does not require you to provision or rotate any secrets. Pour plus d’informations sur les identités managées dans AAD, consultez Identités gérées pour les ressources Azure.For more about managed identities in AAD, see Managed identities for Azure resources.

Deux types d’identité peuvent être accordés à votre application :Your application can be granted two types of identities:

  • Une identité attribuée par le système est liée à votre application et est supprimée si votre application est supprimée.A system-assigned identity is tied to your application and is deleted if your app is deleted. Une application ne peut avoir qu’une seule identité attribuée par le système.An app can only have one system-assigned identity.
  • Une identité attribuée par l’utilisateur est une ressource Azure autonome qui peut être assignée à votre application.A user-assigned identity is a standalone Azure resource which can be assigned to your app. Une application peut avoir plusieurs identités attribuées par l’utilisateur.An app can have multiple user-assigned identities.

Ajout d’une identité attribuée par le systèmeAdding a system-assigned identity

Créer une application avec une identité attribuée par le système requiert la définition d’une propriété supplémentaire sur cette application.Creating an app with a system-assigned identity requires an additional property to be set on the application.

Utilisation du portail AzureUsing the Azure portal

Pour configurer une identité managée dans le portail, vous créez une application selon la procédure habituelle, puis vous activez la fonctionnalité.To set up a managed identity in the portal, you will first create an application as normal and then enable the feature.

  1. Créez une application dans le portail, comme vous le feriez normalement.Create an app in the portal as you normally would. Accédez-y dans le portail.Navigate to it in the portal.

  2. Si vous utilisez une application de fonction, accédez à Fonctionnalités de la plateforme.If using a function app, navigate to Platform features. Pour les autres types d’application, faites défiler jusqu’au groupe Paramètres dans le volet de navigation de gauche.For other app types, scroll down to the Settings group in the left navigation.

  3. Sélectionnez Identité managée.Select Managed identity.

  4. Dans l’onglet Attribuée par le système, définissez État sur Activé.Within the System assigned tab, switch Status to On. Cliquez sur Enregistrer.Click Save.

Identité managée dans App Service

Utilisation de l’interface de ligne de commande Azure (CLI)Using the Azure CLI

Pour configurer une identité managée avec Azure CLI, vous devez utiliser la commande az webapp identity assign sur une application existante.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. Vous avez le choix entre trois options pour exécuter les exemples de cette section :You have three options for running the examples in this section:

Les étapes suivantes vous guident dans la création d’une application web à laquelle vous attribuez une identité en utilisant l’interface CLI :The following steps will walk you through creating a web app and assigning it an identity using the CLI:

  1. Si vous utilisez l’interface de ligne de commande Azure dans une console locale, commencez par vous connecter à Azure avec az login.If you're using the Azure CLI in a local console, first sign in to Azure using az login. Utilisez un compte associé à l’abonnement Azure dans lequel vous souhaitez déployer l’application :Use an account that is associated with the Azure subscription under which you would like to deploy the application:

    az login
    
  2. Créez une application web avec CLI.Create a web application using the CLI. Pour plus d’exemples d’utilisation de CLI avec App Service, consultez Exemples CLI App Service :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. Exécutez la commande identity assign pour créer l’identité de cette application :Run the identity assign command to create the identity for this application:

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

Utilisation de Microsoft Azure PowerShellUsing Azure PowerShell

Notes

Cet article a été mis à jour pour tenir compte de l’utilisation du nouveau module Az d’Azure PowerShell.This article has been updated to use the new Azure PowerShell Az module. Vous pouvez toujours utiliser le module AzureRM, qui continue à recevoir des correctifs de bogues jusqu’à au moins décembre 2020.You can still use the AzureRM module, which will continue to receive bug fixes until at least December 2020. Pour en savoir plus sur le nouveau module Az et la compatibilité avec AzureRM, consultez Présentation du nouveau module Az d’Azure PowerShell.To learn more about the new Az module and AzureRM compatibility, see Introducing the new Azure PowerShell Az module. Pour des instructions d’installation du module Az, consultez Installer Azure PowerShell.For Az module installation instructions, see Install Azure PowerShell.

Les étapes suivantes vous guident dans la création d’une application web à laquelle vous attribuez une identité en utilisant Azure PowerShell :The following steps will walk you through creating a web app and assigning it an identity using Azure PowerShell:

  1. Si nécessaire, installez Azure PowerShell à l’aide des instructions figurant dans le Guide Azure PowerShell, puis exécutez Login-AzAccount pour créer une connexion avec Azure.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. Créez une application web avec Azure PowerShell.Create a web application using Azure PowerShell. Pour plus d’exemples sur l’utilisation d’Azure PowerShell avec App Service, consultez Exemples App Service PowerShell :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. Exécutez la commande Set-AzWebApp -AssignIdentity pour créer l’identité de cette application :Run the Set-AzWebApp -AssignIdentity command to create the identity for this application:

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

Utilisation d’un modèle Azure Resource ManagerUsing an Azure Resource Manager template

Vous pouvez utiliser un modèle Azure Resource Manager pour automatiser le déploiement de vos ressources Azure.An Azure Resource Manager template can be used to automate deployment of your Azure resources. Pour en savoir plus sur le déploiement sur App Service et Functions, consultez Automatiser le déploiement de ressources dans App Service et Automatiser le déploiement de ressources dans 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.

Vous pouvez créer n’importe quelle ressource de type Microsoft.Web/sites avec une identité en incluant la propriété suivante dans la définition de la ressource :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"
}    

Notes

Une application peut avoir simultanément une identité attribuée par le système et une identité attribuée par l’utilisateur.An application can have both system-assigned and user-assigned identities at the same time. Dans ce cas, la propriété type est SystemAssigned,UserAssignedIn this case, the type property would be SystemAssigned,UserAssigned

L’ajout du type attribué par le système indique à Azure de créer et de manager l’identité de votre application.Adding the system-assigned type tells Azure to create and manage the identity for your application.

Par exemple, une application web peut se présenter comme suit :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'))]"
    ]
}

Quand le site est créé, il a les propriétés supplémentaires suivantes :When the site is created, it has the following additional properties:

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

<TENANTID> et <PRINCIPALID> sont remplacés par des GUID.Where <TENANTID> and <PRINCIPALID> are replaced with GUIDs. La propriété tenantId identifie le locataire AAD auquel appartient l’identité.The tenantId property identifies what AAD tenant the identity belongs to. La propriété principalId est un identificateur unique pour la nouvelle identité de l’application.The principalId is a unique identifier for the application's new identity. Dans AAD, le principal de service porte le même nom que celui que vous avez donné à votre instance App Service ou Azure Functions.Within AAD, the service principal has the same name that you gave to your App Service or Azure Functions instance.

Ajout d’une identité attribuée par l’utilisateurAdding a user-assigned identity

La création d’une application avec une identité attribuée par l’utilisateur nécessite la création de l’identité, puis l’ajout de son identificateur de ressource à la configuration de votre application.Creating an app with a user-assigned identity requires that you create the identity and then add its resource identifier to your app config.

Utilisation du portail AzureUsing the Azure portal

Tout d’abord, vous devrez créer une ressource d’identité attribuée par l’utilisateur.First, you'll need to create a user-assigned identity resource.

  1. Créez une ressource d’identité managée attribuée par l’utilisateur en suivant ces instructions.Create a user-assigned managed identity resource according to these instructions.

  2. Créez une application dans le portail, comme vous le feriez normalement.Create an app in the portal as you normally would. Accédez-y dans le portail.Navigate to it in the portal.

  3. Si vous utilisez une application de fonction, accédez à Fonctionnalités de la plateforme.If using a function app, navigate to Platform features. Pour les autres types d’application, faites défiler jusqu’au groupe Paramètres dans le volet de navigation de gauche.For other app types, scroll down to the Settings group in the left navigation.

  4. Sélectionnez Identité managée.Select Managed identity.

  5. Dans l’onglet Attribuée par l’utilisateur, cliquez sur Ajouter.Within the User assigned tab, click Add.

  6. Recherchez l’identité que vous avez créée précédemment et sélectionnez-la.Search for the identity you created earlier and select it. Cliquez sur Add.Click Add.

Identité managée dans App Service

Utilisation d’un modèle Azure Resource ManagerUsing an Azure Resource Manager template

Vous pouvez utiliser un modèle Azure Resource Manager pour automatiser le déploiement de vos ressources Azure.An Azure Resource Manager template can be used to automate deployment of your Azure resources. Pour en savoir plus sur le déploiement sur App Service et Functions, consultez Automatiser le déploiement de ressources dans App Service et Automatiser le déploiement de ressources dans 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.

Vous pouvez créer n’importe quelle ressource de type Microsoft.Web/sites avec une identité en incluant le bloc suivant dans la définition de la ressource, en remplaçant <RESOURCEID> par l’ID de ressource de l’identité requise :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>": {}
    }
}    

Notes

Une application peut avoir simultanément une identité attribuée par le système et une identité attribuée par l’utilisateur.An application can have both system-assigned and user-assigned identities at the same time. Dans ce cas, la propriété type est SystemAssigned,UserAssignedIn this case, the type property would be SystemAssigned,UserAssigned

L’ajout du type attribué par l’utilisateur indique à Azure de créer et de manager l’identité de votre application.Adding the user-assigned type and a cotells Azure to create and manage the identity for your application.

Par exemple, une application web peut se présenter comme suit :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'))]"
    ]
}

Quand le site est créé, il a les propriétés supplémentaires suivantes :When the site is created, it has the following additional properties:

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

<PRINCIPALID> et <CLIENTID> sont remplacés par des GUID.Where <PRINCIPALID> and <CLIENTID> are replaced with GUIDs. principalId est un identificateur unique pour l’identité qui est utilisée pour l’administration d’AAD.The principalId is a unique identifier for the identity which is used for AAD administration. clientId est un identificateur unique pour la nouvelle identité de l’application qui est utilisée pour spécifier l’identité à utiliser lors des appels de runtime.The clientId is a unique identifier for the application's new identity that is used for specifying which identity to use during runtime calls.

Obtention de jetons pour les ressources AzureObtaining tokens for Azure resources

Une application peut utiliser son identité pour obtenir des jetons pour d’autres ressources protégées par AAD, telles qu’Azure Key Vault.An app can use its identity to get tokens to other resources protected by AAD, such as Azure Key Vault. Ces jetons représentent l’application qui accède à la ressource, pas un utilisateur spécifique de l’application.These tokens represent the application accessing the resource, and not any specific user of the application.

Important

Vous pouvez être amené à configurer la ressource cible pour autoriser l’accès à partir de votre application.You may need to configure the target resource to allow access from your application. Par exemple, si vous demandez un jeton de coffre de clés, vous devez vérifier que vous avez ajouté une stratégie d’accès qui inclut l’identité de votre application.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. Si tel n’est pas le cas, vos appels au coffre de clés sont rejetés, même s’ils incluent le jeton.Otherwise, your calls to Key Vault will be rejected, even if they include the token. Pour en savoir plus sur les ressources qui prennent en charge les jetons Azure Active Directory, consultez Services Azure prenant en charge l’authentification Azure AD.To learn more about which resources support Azure Active Directory tokens, see Azure services that support Azure AD authentication.

Il existe un protocole REST simple pour obtenir un jeton dans App Service et Azure Functions.There is a simple REST protocol for obtaining a token in App Service and Azure Functions. Pour les applications .NET, la bibliothèque Microsoft.Azure.Services.AppAuthentication fournit une abstraction sur ce protocole et prend en charge une expérience de développement local.For .NET applications, the Microsoft.Azure.Services.AppAuthentication library provides an abstraction over this protocol and supports a local development experience.

Utilisation de la bibliothèque Microsoft.Azure.Services.AppAuthentication pour .NETUsing the Microsoft.Azure.Services.AppAuthentication library for .NET

Pour les applications et les fonctions .NET, la façon la plus simple pour utiliser une identité managée consiste à passer par le package Microsoft.Azure.Services.AppAuthentication.For .NET applications and functions, the simplest way to work with a managed identity is through the Microsoft.Azure.Services.AppAuthentication package. Cette bibliothèque vous permet également de tester votre code localement sur votre machine de développement, à l’aide de votre compte d’utilisateur à partir de Visual Studio, d’Azure CLI ou de l’authentification intégrée à Active Directory.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. Pour plus d’informations sur les options de développement local avec cette bibliothèque, consultez le Guide de référence technique sur Microsoft.Azure.Services.AppAuthentication.For more on local development options with this library, see the Microsoft.Azure.Services.AppAuthentication reference. Cette section vous montre comment prendre en main la bibliothèque dans votre code.This section shows you how to get started with the library in your code.

  1. Ajoutez des références aux packages Microsoft.Azure.Services.AppAuthentication et aux autres packages NuGet nécessaires à votre application.Add references to the Microsoft.Azure.Services.AppAuthentication and any other necessary NuGet packages to your application. L’exemple ci-dessous utilise également Microsoft.Azure.KeyVault.The below example also uses Microsoft.Azure.KeyVault.

  2. Ajoutez le code suivant à votre application, modification pour cibler la bonne ressource.Add the following code to your application, modifying to target the correct resource. Cet exemple montre deux façons de travailler avec 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));

Pour en savoir plus sur Microsoft.Azure.Services.AppAuthentication et les opérations qu’il expose, consultez le Guide de référence technique sur Microsoft.Azure.Services.AppAuthentication et l’exemple .NET associant App Service, Key Vault et l’identité du service administré.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.

Utilisation du SDK Azure pour JavaUsing the Azure SDK for Java

Pour les fonctions et applications Java, la façon la plus simple d’utiliser une identité managée consiste à utiliser le SDK Azure pour Java.For Java applications and functions, the simplest way to work with a managed identity is through the Azure SDK for Java. Cette section vous montre comment prendre en main la bibliothèque dans votre code.This section shows you how to get started with the library in your code.

  1. Ajoutez une référence à la bibliothèque du SDK Azure.Add a reference to the Azure SDK library. Pour les projets Maven, vous pouvez ajouter cet extrait de code à la section dependencies du fichier POM du projet :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. Utilisez l’objet AppServiceMSICredentials pour l’authentification.Use the AppServiceMSICredentials object for authentication. Cet exemple montre comment ce mécanisme peut être utilisé avec Azure Key Vault :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);

Utilisation du protocole RESTUsing the REST protocol

Une application avec une identité managée a deux variables d’environnement définies :An app with a managed identity has two environment variables defined:

  • MSI_ENDPOINT - URL du service de jetons local.MSI_ENDPOINT - the URL to the local token service.
  • MSI_SECRET - en-tête utilisé afin de limiter les attaques de falsification de requêtes côté serveur (SSRF).MSI_SECRET - a header used to help mitigate server-side request forgery (SSRF) attacks. La plateforme effectue la rotation de la valeur.The value is rotated by the platform.

MSI_ENDPOINT est une URL locale à partir de laquelle votre application peut demander des jetons.The MSI_ENDPOINT is a local URL from which your app can request tokens. Pour obtenir un jeton pour une ressource, effectuez une requête HTTP GET à destination de ce point de terminaison, en indiquant notamment les paramètres suivants :To get a token for a resource, make an HTTP GET request to this endpoint, including the following parameters:

Nom du paramètreParameter name DansIn DescriptionDescription
resourceresource RequêteQuery URI de ressource AAD de la ressource pour laquelle un jeton doit être obtenu.The AAD resource URI of the resource for which a token should be obtained. Il peut s’agir d’un des services Azure prenant en charge l’authentification Azure AD ou toute autre ressource URI.This could be one of the Azure services that support Azure AD authentication or any other resource URI.
api-versionapi-version RequêteQuery Version de l’API de jeton à utiliser.The version of the token API to be used. « 2017-09-01 » est la seule version prise en charge."2017-09-01" is currently the only version supported.
secretsecret En-têteHeader Valeur de la variable d’environnement MSI_SECRET.The value of the MSI_SECRET environment variable. Cet en-tête est utilisé afin de limiter les attaques de falsification de requêtes côté serveur (SSRF).This header is used to help mitigate server-side request forgery (SSRF) attacks.
clientidclientid RequêteQuery (Facultatif) L’ID de l’identité attribuée par l’utilisateur à utiliser.(Optional) The ID of the user-assigned identity to be used. Si elle est omise, l’identité attribuée par le système est utilisée.If omitted, the system-assigned identity is used.

Une réponse 200 OK correcte comprend un corps JSON avec les propriétés suivantes :A successful 200 OK response includes a JSON body with the following properties:

Nom de la propriétéProperty name DescriptionDescription
access_tokenaccess_token Le jeton d’accès demandé.The requested access token. Le service web appelant peut utiliser ce jeton pour s’authentifier auprès du service web de destination.The calling web service can use this token to authenticate to the receiving web service.
expires_onexpires_on L’heure d’expiration du jeton d’accès.The time when the access token expires. La date est représentée en nombre de secondes à partir du 1er janvier 1970 (1970-01-01T0:0:0Z) UTC jusqu’au moment de l’expiration.The date is represented as the number of seconds from 1970-01-01T0:0:0Z UTC until the expiration time. Cette valeur est utilisée pour déterminer la durée de vie des jetons en cache.This value is used to determine the lifetime of cached tokens.
resourceresource L’URI ID d’application du service web de destination.The App ID URI of the receiving web service.
token_typetoken_type Indique la valeur du type de jeton.Indicates the token type value. Le seul type de jeton pris en charge par Azure AD est le jeton porteur.The only type that Azure AD supports is Bearer. Pour plus d’informations sur les jetons du porteur, consultez OAuth 2.0 Authorization Framework: Bearer Token Usage (RFC 6750).For more information about bearer tokens, see The OAuth 2.0 Authorization Framework: Bearer Token Usage (RFC 6750).

Cette réponse est la même que la réponse pour la demande de jeton d’accès de service à service AAD.This response is the same as the response for the AAD service-to-service access token request.

Notes

Les variables d’environnement sont configurées au premier démarrage du processus ; ainsi, après l’activation d’une identité managée pour votre application, vous devrez peut-être redémarrer votre application, ou redéployer son code avant que MSI_ENDPOINT et MSI_SECRET soient disponibles pour votre code.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.

Exemples de protocole RESTREST protocol examples

Voici un exemple de demande :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

Et voici un exemple de réponse :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"
}

Exemples de codeCode examples

Pour écrire cette requête en 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));
}

Conseil

Dans le cas des langages .NET, vous pouvez également utiliser Microsoft.Azure.Services.AppAuthentication au lieu d’élaborer cette demande vous-même.For .NET languages, you can also use Microsoft.Azure.Services.AppAuthentication instead of crafting this request yourself.

En Node.JS :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);
}

Dans 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

Dans PowerShell :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

Suppression d’une identitéRemoving an identity

Vous pouvez supprimer une identité attribuée par le système en désactivant la fonctionnalité à l’aide du portail, de PowerShell ou de l’interface CLI, de la même façon que vous l’avez créée.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. Les identités attribuées par l’utilisateur peuvent être supprimées individuellement.User-assigned identities can be removed individually. Pour supprimer toutes les identités, dans le protocole de modèle REST/ARM, définissez le type sur « Aucun » :To remove all identities, in the REST/ARM template protocol, this is done by setting the type to "None":

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

Si vous supprimez une identité attribuée par le système de cette façon, vous la supprimez également d’AAD.Removing a system-assigned identity in this way will also delete it from AAD. Les identités attribuées par le système sont aussi automatiquement supprimées d’AAD lorsque la ressource d’application est supprimée.System-assigned identities are also automatically removed from AAD when the app resource is deleted.

Notes

Vous pouvez également définir le paramètre d’application WEBSITE_DISABLE_MSI, qui désactive uniquement le service de jetons local.There is also an application setting that can be set, WEBSITE_DISABLE_MSI, which just disables the local token service. Toutefois, cela ne touche pas à l’identité, et les outils continueront d’afficher l’identité managée comme étant activée.However, it leaves the identity in place, and tooling will still show the managed identity as "on" or "enabled." Par conséquent, l’utilisation de ce paramètre n’est pas recommandée.As a result, use of this setting is not recommended.

Étapes suivantesNext steps