Partager via


Tutoriel : connecter une application App Service à SQL Database pour le compte de l’utilisateur connecté

Ce tutoriel vous montre comment connecter une application Azure App Service à une base de données Azure SQL back-end en empruntant l’identité de l’utilisateur connecté, également appelé flux à la place. Pour configurer ce flux, vous activez l’authentification intégrée App Service à l’aide du fournisseur d’identité Microsoft Entra.

Cette méthode de connectivité est plus avancée que l’approche d’identité managée dans le tutoriel : Accéder aux données avec une identité managée et présente les avantages suivants dans les scénarios d’entreprise :

  • Élimine les secrets de connexion aux services principaux, comme l’approche de l’identité managée.
  • Donne à la base de données principale ou à d’autres services Azure plus de contrôle sur la quantité d’accès à accorder à qui.
  • Permet à l’application d’adapter sa présentation de données à l’utilisateur connecté.

Dans ce tutoriel, vous ajoutez l’authentification Microsoft Entra à une application web .NET qui dispose d’un back-end Azure SQL Database. Vous apprenez à :

  • Activez l’authentification Microsoft Entra pour Azure SQL Database.
  • Désactivez d’autres options d’authentification SQL Database.
  • Ajoutez l’ID Microsoft Entra en tant que fournisseur d’identité pour votre application.
  • Configurez l’autorisation d’emprunt d’identité de l’utilisateur SQL Database.
  • Configurez App Service pour fournir un jeton d’accès utilisable pour SQL Database.
  • Accédez à votre base de données Azure SQL pour le compte de l’utilisateur Microsoft Entra connecté.

Une fois le tutoriel terminé, votre application se connecte en toute sécurité à SQL Database pour le compte de l’utilisateur connecté.

Diagramme d’architecture pour le scénario de didacticiel.

Notes

Prérequis

  • Accédez à un locataire Microsoft Entra rempli avec des utilisateurs et des groupes.

  • Suivez le didacticiel au tutoriel : Créer une application ASP.NET Core et SQL Database dans Azure App Service et utiliser l’application terminée pour ce didacticiel.

    Vous pouvez également adapter les étapes et utiliser votre propre application .NET avec SQL Database. Les étapes décrites dans ce tutoriel prennent en charge les versions .NET suivantes :

    • .NET Framework 4.8 et versions ultérieures
    • .NET 6.0 et versions ultérieures
  • Connectez-vous à Azure Cloud Shell ou préparez votre environnement pour utiliser Azure CLI.

1. Configurer le serveur de base de données avec l’authentification Microsoft Entra

Activez l’authentification Microsoft Entra sur la base de données Azure SQL en affectant un utilisateur Microsoft Entra en tant qu’administrateur du serveur Azure SQL. L’administrateur Microsoft Entra doit être un utilisateur créé, importé, synchronisé ou invité dans l’ID Microsoft Entra. L’utilisateur Microsoft Entra peut ne pas être identique à l’utilisateur du compte Microsoft pour l’abonnement Azure.

Pour ajouter l’utilisateur Microsoft Entra ID en tant qu’administrateur du serveur Azure SQL Server, exécutez les commandes Azure CLI suivantes.

  1. Utilisez az ad user list avec le display-nameparamètre , filterou upn pour obtenir l’ID d’objet de l’utilisateur Microsoft Entra ID que vous souhaitez rendre administrateur. Par exemple, la commande suivante répertorie les informations d’un utilisateur Microsoft Entra ID avec le display-name nom de prénom.

    az ad user list --display-name "Firstname Lastname"
    

    Copiez la id valeur de la sortie à utiliser à l’étape suivante.

    Conseil

    Vous pouvez exécuter az ad user list autonome pour afficher des informations pour tous les utilisateurs du répertoire Microsoft Entra.

  2. Ajoutez l’utilisateur Microsoft Entra ID en tant qu’administrateur sur votre serveur Azure SQL à l’aide az sql server ad-admin create du object-id paramètre. Dans la commande suivante, remplacez <group-name> par le nom du groupe de ressources de votre serveur, <server-name> par le nom de votre serveur moins le .database.windows.net suffixe et <entra-id> par la id sortie de la commande précédente az ad user list .

    az sql server ad-admin create --resource-group <group-name> --server-name <server-name> --display-name ADMIN --object-id <entra-id>
    
  3. Limitez l’authentification du serveur de base de données à l’authentification Microsoft Entra uniquement. Cette étape désactive l’authentification par nom d’utilisateur et mot de passe SQL.

    az sql server ad-only-auth enable --resource-group <group-name> --name <server-name>
    

2. Activer l’authentification Microsoft Entra ID pour votre application

Ajoutez l’ID Microsoft Entra en tant que fournisseur d’identité pour votre application. Pour plus d’informations, consultez Configurer l’authentification Microsoft Entra pour votre application App Services.

  1. Dans la page du portail Azure de votre application, sélectionnez Authentification sous Paramètres dans le menu de navigation de gauche.

  2. Dans la page Authentification , sélectionnez Ajouter un fournisseur d’identité, ou sélectionnez Ajouter un fournisseur dans la section Fournisseur d’identité .

  3. Dans la page Ajouter un fournisseur d’identité , sélectionnez Microsoft comme fournisseur.

  4. Pour l’expiration du secret client, sélectionnez l’une des options de liste déroulante, telles que Recommandées : 180 jours.

  5. Conservez tous les paramètres par défaut, puis sélectionnez Ajouter.

    Capture d’écran montrant la page Ajouter un fournisseur d’identité.

Notes

Si vous reconfigurez les paramètres d’authentification de votre application, les jetons du magasin de jetons peuvent ne pas se régénérer à partir des nouveaux paramètres. Pour vous assurer que vos jetons se régénèrent, déconnectez-vous et reconnectez-vous à votre application. Une méthode simple consiste à utiliser votre navigateur en mode privé. Fermez et rouvrez le navigateur en mode privé après avoir modifié les paramètres dans vos applications.

3. Configurer l’emprunt d’identité de l’utilisateur SQL Database

Accordez à votre application des autorisations pour accéder à SQL Database pour le compte de l’utilisateur Microsoft Entra connecté.

  1. Dans la page Authentification de l’application, sélectionnez le nom de votre application sous Fournisseur d’identité.

    La page d’inscription de l’application s’ouvre. Cette inscription a été générée automatiquement lorsque vous avez ajouté le fournisseur Microsoft Entra.

  2. Sélectionnez autorisations d’API sous Gérer dans le menu de navigation de gauche.

  3. Dans la page Autorisations de l’API , sélectionnez Ajouter une autorisation.

  4. Dans l’écran Demander des autorisations d’API , sélectionnez l’onglet API que mon organisation utilise .

  5. Entrez Azure SQL Database dans la zone de recherche et sélectionnez le résultat.

  6. Sous Quel type d’autorisations votre application requiert, sélectionnez Autorisations déléguées, cochez la case en regard de user_impersonation, puis sélectionnez Ajouter des autorisations.

    Capture d’écran de la page Demander des autorisations d’API montrant les autorisations déléguées, user_impersonation et le bouton Ajouter une autorisation sélectionné.

L’inscription d’application dans Microsoft Entra dispose désormais des autorisations nécessaires pour se connecter à SQL Database en empruntant l’identité de l’utilisateur connecté.

4. Configurer App Service pour renvoyer un jeton d’accès utilisable

Pour configurer votre application afin de fournir un jeton d’accès utilisable pour SQL Database, vous ajoutez https://database.windows.net/user_impersonation en tant que scope fournisseur loginParametersMicrosoft Entra de l’application. La commande suivante ajoute la loginParameters propriété avec des étendues personnalisées aux paramètres du fournisseur login d’identité Microsoft Entra.

Parmi les étendues demandées, App Service demande openiddéjà, profileet email les étendues par défaut. L’étendue offline_access est incluse afin de pouvoir actualiser les jetons. Pour plus d’informations, consultez les étendues OpenID Connect.

L’étendue https://database.windows.net/user_impersonation fait référence à Azure SQL Database et fournit un jeton web JSON (JWT) qui spécifie SQL Database comme destinataire du jeton. Cette commande utilise jq pour le traitement JSON, qui est déjà installé dans Cloud Shell.

authSettings=$(az webapp auth show --resource-group <group-name> --name <app-name>)
authSettings=$(echo "$authSettings" | jq '.properties' | jq '.identityProviders.azureActiveDirectory.login += {"loginParameters":["scope=openid profile email offline_access https://database.windows.net/user_impersonation"]}')
az webapp auth set --resource-group <group-name> --name <app-name> --body "$authSettings"

Conseil

Pour configurer l’étendue requise à l’aide d’une interface web au lieu d’Azure CLI, utilisez configurer le fournisseur Microsoft Entra pour fournir des jetons d’actualisation, en ajoutant https://database.windows.net/user_impersonation aux étendues demandées.

Votre application est maintenant configurée pour générer un jeton d’accès accepté par SQL Database.

Notes

Les jetons d’accès expirent après un certain temps. Pour plus d’informations sur l’actualisation de vos jetons d’accès sans obliger les utilisateurs à se réauthentifier avec votre application, consultez Actualiser les jetons d’authentification.

5. Utiliser le jeton d’accès dans le code de votre application

Mettez à jour votre code d’application pour ajouter le jeton d’accès fourni par l’authentification App Service à l’objet de connexion.

Notes

Ce code ne fonctionne pas localement. Pour plus d’informations et d’alternatives pour le débogage local, consultez Déboguer localement lorsque vous utilisez l’authentification App Service.

  1. Dans votre DbContext objet dans DatabaseContext.cs ou un autre fichier qui configure le contexte de base de données, modifiez le constructeur par défaut pour ajouter le jeton d’accès d’ID Microsoft Entra à l’objet de connexion.

    public MyDatabaseContext (DbContextOptions<MyDatabaseContext> options, IHttpContextAccessor accessor)
        : base(options)
    {
        var conn = Database.GetDbConnection() as SqlConnection;
        conn.AccessToken = accessor.HttpContext.Request.Headers["X-MS-TOKEN-AAD-ACCESS-TOKEN"];
    }
    
  2. Si vous avez une chaîne de connexion appelée defaultConnection dans App Service qui utilise l’authentification SQL avec un nom d’utilisateur et un mot de passe, utilisez la commande suivante pour supprimer les secrets de connexion. Remplacez <group-name>, , <app-name><db-server-name>et <db-name> par vos valeurs.

    az webapp config connection-string set --resource-group <group-name> --name <app-name> --connection-string-type SQLAzure --settings defaultConnection="server=tcp:<db-server-name>.database.windows.net;database=<db-name>;"
    

6. Publier vos modifications

Si vous avez utilisé Visual Studio Code dans le navigateur pour modifier votre code dans votre fork GitHub, sélectionnez Contrôle de code source dans le menu de gauche. Entrez un message de validation comme OBO connect et sélectionnez Valider.

La validation déclenche un déploiement GitHub Actions sur App Service. Attendez quelques minutes pour que le déploiement se termine.

Vous pouvez également publier vos modifications dans Git Bash à l’aide des commandes suivantes :

git commit -am "configure managed identity"
git push azure main

Si votre code se trouve dans Visual Studio :

  1. Cliquez avec le bouton droit sur votre projet dans l’Explorateur de solutions , puis sélectionnez Publier.

    Capture d’écran montrant comment publier à partir de l’Explorateur de solutions dans Visual Studio.

  2. Dans la page Publier , sélectionnez Publier.

Lorsque la page de la nouvelle application affiche votre application, l’application se connecte à la base de données Azure SQL pour le compte de l’utilisateur Microsoft Entra connecté. Vous devez être en mesure d’utiliser et de modifier votre application comme d’habitude.

Capture d’écran montrant l’application web après la publication.

7. Nettoyer les ressources

Au cours des étapes précédentes, vous avez créé des ressources Azure au sein d’un groupe de ressources. Lorsque vous n’avez plus besoin de ces ressources, supprimez le groupe de ressources en exécutant la commande suivante :

az group delete --name <group-name>

Cette commande peut prendre un certain temps pour s’exécuter.

Forum aux questions

Pourquoi obtenir une erreur « Échec de connexion pour l’utilisateur «< principal> identifié par jeton » ?

Les causes les plus courantes d’une Login failed for user '<token-identified principal>' erreur sont les suivantes :

Comment faire pour ajouter d’autres utilisateurs ou groupes Microsoft Entra dans Azure SQL Database ?

Pour ajouter d’autres utilisateurs ou groupes, connectez-vous à votre serveur de base de données à l’aide de sqlcmd ou SQL Server Management Studio (SSMS) et créez des utilisateurs de base de données autonomes mappés aux identités Microsoft Entra.

L’exemple de Transact-SQL suivant ajoute une identité Microsoft Entra à SQL Server et donne à l’identité certains rôles de base de données :

CREATE USER [<user-or-group-name>] FROM EXTERNAL PROVIDER;
ALTER ROLE db_datareader ADD MEMBER [<user-or-group-name>];
ALTER ROLE db_datawriter ADD MEMBER [<user-or-group-name>];
ALTER ROLE db_ddladmin ADD MEMBER [<user-or-group-name>];
GO

Comment déboguer localement lors de l’utilisation de l’authentification App Service ?

Étant donné que l’authentification App Service est une fonctionnalité Azure, le code de ce didacticiel ne fonctionne pas dans votre environnement local. Contrairement à une application s’exécutant dans Azure, votre code local ne bénéficie pas de l’intergiciel d’authentification App Service. Vous pouvez utiliser les alternatives suivantes pour le débogage local :

  • Connectez-vous à SQL Database à partir de votre environnement local avec Active Directory Interactive l’authentification. Ce flux d’authentification ne connecte pas l’utilisateur lui-même, mais se connecte à la base de données principale avec l’utilisateur connecté afin de pouvoir tester l’autorisation de base de données localement.
  • Copiez manuellement le jeton d’accès dans votre code à la place de l’en-tête X-MS-TOKEN-AAD-ACCESS-TOKEN de demande.
  • Si vous déployez à partir de Visual Studio, utilisez le débogage à distance de votre application App Service.

Que se passe-t-il lorsque les jetons d’accès expirent ?

Votre jeton d’accès expire après un certain laps de temps. Pour plus d’informations sur la façon d’actualiser vos jetons d’accès sans obliger les utilisateurs à se réauthentifier auprès de votre application, consultez Actualiser les jetons de fournisseur d’identité.