Démarrage rapide : Protéger une API web ASP.NET Core avec la plateforme d’identités Microsoft

Ce guide de démarrage rapide utilise un exemple de code d’API web ASP.NET Core pour montrer comment restreindre l’accès aux ressources aux comptes autorisés. L’exemple utilise l’Identité ASP.NET Core qui interagit avec la bibliothèque d’authentification Microsoft (MSAL) pour gérer l’authentification.

Prérequis

Inscrire l’application et enregistrer les identificateurs

Conseil

Les étapes décrites dans cet article peuvent varier légèrement en fonction du portail de départ.

Pour terminer l’inscription, fournissez un nom à l’application et spécifiez les types de comptes pris en charge. Une fois l’inscription terminée, la page Vue d’ensemble de l’application affiche les identificateurs nécessaires dans le code source de l’application.

  1. Connectez-vous au centre d’administration de Microsoft Entra au minimum en tant que Développeur d’application.

  2. Si vous avez accès à plusieurs tenants, utilisez l’icône Paramètres dans le menu supérieur pour basculer vers le tenant dans lequel vous voulez inscrire l’application à partir du menu Répertoires + abonnements.

  3. Accédez à Identité>Applications>Inscriptions d’applications.

  4. Sélectionnez Nouvelle inscription.

  5. Attribuez un Nom à l’application, par exemple NewWebAPI1.

  6. Pour les Types de comptes pris en charge, sélectionnez Comptes dans cet annuaire organisationnel. Pour plus d’informations sur les différents types de comptes, sélectionnez l’option M’aider à choisir.

  7. Sélectionnez Inscription.

    Capture d’écran montrant comment entrer un nom et sélectionner le type de compte.

  8. Le volet Vue d’ensemble de l’application s’affiche à la fin de l’inscription. Inscrivez l’ID de l’annuaire (locataire) et l’ID d’application (client) à utiliser dans le code source de votre application.

    Capture d’écran montrant les valeurs d’identificateur dans la page Vue d’ensemble.

Notes

Il est possible de modifier les types de comptes pris en charge. Pour cela, consultez l’article Modifier les comptes pris en charge par une application.

Exposer une API

Une fois l’API inscrite, vous pouvez configurer son autorisation en définissant les étendues qu’elle expose aux applications clientes. Les applications clientes demandent l’autorisation d’effectuer des opérations en passant un jeton d’accès et les requêtes associées à l’API web protégée. Votre API web effectue ensuite l’opération demandée uniquement si le jeton d’accès qu’elle reçoit contient les étendues nécessaires.

  1. Sous Gérer, sélectionnez Exposer une API > Ajouter une étendue. Acceptez l’URI d’ID d’application(api://{clientId}) proposé en sélectionnant Enregistrer et continuer. {clientId} est la valeur enregistrée depuis la page Vue d’ensemble. Entrez ensuite les informations suivantes :

    1. Pour Nom de l’étendue, entrez Forecast.Read.
    2. Pour Qui peut donner son consentement, vérifiez que l’option Administrateurs et utilisateurs est sélectionnée.
    3. Dans la zone Nom d’affichage du consentement administrateur, entrez Read forecast data.
    4. Dans Description du consentement de l’administrateur, entrez Allows the application to read weather forecast data.
    5. Dans la zone Nom d’affichage du consentement utilisateur, entrez Read forecast data.
    6. Dans la zone Description du consentement de l’utilisateur, entrez Allows the application to read weather forecast data.
    7. Vérifiez que l’État défini est Activé.
  2. Sélectionnez Ajouter une étendue. Si l’étendue a été entrée correctement, elle figure dans le volet Exposer une API.

    Capture d’écran montrant les valeurs des champs pendant l’ajout de l’étendue à une API.

Cloner ou télécharger l’exemple d’application

Pour obtenir l’exemple d’application, vous pouvez le cloner à partir de GitHub ou le télécharger sous la forme d’un fichier .zip.

  • Pour cloner l’exemple, ouvrez une invite de commandes, accédez à l’emplacement où vous souhaitez créer le projet, puis entrez la commande suivante :

    git clone https://github.com/Azure-Samples/ms-identity-docs-code-dotnet.git
    
  • Téléchargez le fichier .zip. Extrayez-la dans un chemin d’accès de fichier où la longueur du nom est inférieure à 260 caractères.

Configurer l’exemple d’application ASP.NET Core

  1. Dans votre IDE, ouvrez le dossier de projet ms-identity-docs-code-dotnet/web-api, qui contient l’exemple.

  2. Ouvrez le fichier appsettings.json, qui contient l’extrait de code suivant :

    {
      "AzureAd": {
        "Instance": "https://login.microsoftonline.com/",
        "TenantId": "Enter the tenant ID obtained from the Microsoft Entra admin center",
        "ClientId": "Enter the client ID obtained from the Microsoft Entra admin center",
        "Scopes": "Forecast.Read"
      },
      "Logging": {
        "LogLevel": {
          "Default": "Information",
          "Microsoft.AspNetCore": "Warning"
        }
      },
      "AllowedHosts": "*"
    }
    

    Recherchez la key suivante :

    • ClientId – Identificateur de l’application, également appelé client. Remplacez le texte value entre guillemets par l’ID d’application (client) enregistré précédemment à partir de la page Vue d’ensemble de l’application inscrite.
    • TenantId – Identificateur du locataire où l’application est inscrite. Remplacez le texte value entre guillemets par l’ID de l’annuaire (locataire) enregistré précédemment à partir de la page Vue d’ensemble de l’application inscrite.

Exécuter l’exemple d’application

  1. Exécutez la commande suivante pour démarrer l’application :

    dotnet run
    
  2. Un résultat semblable à l’exemple suivant s’affiche :

    ...
    info: Microsoft.Hosting.Lifetime[14]
          Now listening on: https://localhost:{port}
    ...
    

    Enregistrez le numéro de port dans l’URL https://localhost:{port}.

  3. Pour vérifier que le point de terminaison est protégé, utilisez la commande cURL suivante dans Bash pour envoyer une requête HTTP GET non authentifiée dans Bash :

    curl -X GET https://localhost:5001/weatherforecast -ki
    

    La réponse attendue est 401 Non autorisée avec une sortie similaire à :

    user@host:~$ curl -X GET https://localhost:5001/weatherforecast -ki
    HTTP/2 401
    date: Fri, 23 Sep 2023 23:34:24 GMT
    server: Kestrel
    www-authenticate: Bearer
    content-length: 0