Partager via


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

Ce tutoriel vous montre comment activer l’authentification intégrée dans une application App Service à l’aide du fournisseur d’authentification Azure Microsoft Entra, puis l’étendre en la connectant à un serveur principal Azure SQL Database en empruntant l’identité de l’utilisateur connecté (également appelé flux On-Behalf-Of). Il s’agit d’une approche de connectivité plus avancée du tutoriel : accéder aux données avec une identité managée et présente les avantages suivants dans les scénarios d’Enterprise :

  • Élimine les secrets de connexion aux services principaux, tout comme l’approche d’identité managée.
  • Donne à la base de données principale (ou à tout autre service Azure) un contrôle accru sur les personnes auxquelles accorder l’accès à ses données et à ses fonctionnalités, et sur le niveau d’accès.
  • Permet à l’application d’adapter sa présentation de données à l’utilisateur connecté.

Dans ce tutoriel, vous ajoutez l’authentification Microsoft Entra à l’exemple d’application web que vous avez déployé dans l’un des tutoriels suivants :

Lorsque vous avez terminé, votre exemple d’application authentifie les utilisateurs qui se connectent à SQL Database de manière sécurisée pour le compte de l’utilisateur connecté.

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

Notes

Les étapes décrites dans ce tutoriel prennent en charge les versions suivantes :

  • .NET Framework 4.8 et versions ultérieures
  • .NET 6.0 et versions ultérieures

Contenu :

  • Activer l’authentification intégrée pour Azure SQL Database
  • Désactiver d’autres options d’authentification dans Azure SQL Database
  • Activer l’authentification App Service
  • Utiliser Microsoft Entra ID comme fournisseur d’identité
  • Accéder à Azure SQL Database pour le compte de l’utilisateur Microsoft Entra connecté

Remarque

L’authentification Microsoft Entra est différente de l’authentification Windows intégrée dans Active Directory (AD DS) local. AD DS et Microsoft Entra ID utilisent des protocoles d’authentification totalement différents. Pour plus d’informations, consultez la documentation de Microsoft Entra Domain Services.

Si vous n’avez pas d’abonnement Azure, créez un compte gratuit Azure avant de commencer.

Prérequis

Cet article reprend là où vous vous êtes arrêté dans l’un des tutoriels suivants :

Si vous ne l’avez pas déjà fait, suivez d’abord l’un des deux tutoriels. Vous pouvez également adapter la procédure à votre propre application .NET avec SQL Database.

Préparez votre environnement pour l’interface Azure CLI.

Azure héberge Azure Cloud Shell, un environnement d’interpréteur de commandes interactif que vous pouvez utiliser dans votre navigateur. Vous pouvez utiliser Bash ou PowerShell avec Cloud Shell pour utiliser les services Azure. Vous pouvez utiliser les commandes préinstallées Cloud Shell pour exécuter le code de cet article sans avoir à installer quoi que ce soit dans votre environnement local.

Pour démarrer Azure Cloud Shell :

Option Exemple/Lien
Sélectionnez Essayer dans le coin supérieur droite d’un bloc de codes ou de commandes. La sélection de Essayer ne copie pas automatiquement le code ni la commande dans Cloud Shell. Capture d’écran présentant un exemple d’essai pour Azure Cloud Shell.
Accédez à https://shell.azure.com ou sélectionnez le bouton Lancer Cloud Shell pour ouvrir Cloud Shell dans votre navigateur. Bouton permettant de lancer Azure Cloud Shell.
Sélectionnez le bouton Cloud Shell dans la barre de menus en haut à droite du portail Azure. Capture d’écran présentant le bouton Cloud Shell dans le portail Azure.

Pour utiliser Azure Cloud Shell :

  1. Démarrez Cloud Shell.

  2. Sélectionnez le bouton Copier sur un bloc de codes (ou un bloc de commandes) pour copier le code ou la commande.

  3. Collez le code ou la commande dans la session Cloud Shell en sélectionnant Ctrl+Maj+V sur Windows et Linux ou en sélectionnant Cmd+Maj+V sur macOS.

  4. Sélectionnez Entrée pour exécuter le code ou la commande.

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

Tout d’abord, activez l’authentification Microsoft Entra pour SQL Database en attribuant un utilisateur Microsoft Entra comme administrateur du serveur. Cet utilisateur est différent du compte Microsoft que vous avez utilisé pour vous inscrire à votre abonnement Azure. Il doit s’agir d’un utilisateur créé, importé, synchronisé ou invité dans Microsoft Entra ID. Pour plus d’informations sur les utilisateurs Microsoft Entra autorisés, consultez Fonctionnalités et limitations de Microsoft Entra dans SQL Database.

  1. Si votre locataire Microsoft Entra n’a pas encore d’utilisateur, créez-en un en suivant les étapes de la section Ajouter ou supprimer des utilisateurs à l’aide de Microsoft Entra ID.

  2. Recherchez l’ID d’objet de l’utilisateur Microsoft Entra en utilisant az ad user list et remplacez <user-principal-name> par votre propre valeur. Le résultat est enregistré dans une variable.

    azureaduser=$(az ad user list --filter "userPrincipalName eq '<user-principal-name>'" --query [].id --output tsv)
    

    Conseil

    Pour afficher la liste de tous les noms d’utilisateurs principaux dans Microsoft Entra ID, exécutez az ad user list --query [].userPrincipalName.

  3. Ajoutez cet utilisateur Microsoft Entra en tant qu’administrateur Active Directory à l’aide de la commande az sql server ad-admin create dans Cloud Shell. Dans la commande suivante, remplacez <server-name> par le nom du serveur (sans le suffixe .database.windows.net).

    az sql server ad-admin create --resource-group <group-name> --server-name <server-name> --display-name ADMIN --object-id $azureaduser
    
  4. Limitez l’authentification du serveur de base de données à l’authentification Active Directory. Cette étape désactive efficacement l’authentification SQL.

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

Pour plus d’informations sur l’ajout d’un administrateur Active Directory, consultez Approvisionner un administrateur Microsoft Entra (SQL Database).

2. Activer l’authentification utilisateur pour votre application

Vous activez l’authentification avec Microsoft Entra ID comme fournisseur d’identité. Pour plus d’informations, consultez Configurer l’authentification Microsoft Entra pour votre application App Services.

  1. Dans le menu du portail Azure, sélectionnez Groupes de ressources ou recherchez et sélectionnez Groupes de ressources dans n’importe quelle page.

  2. Dans Groupes de ressources, recherchez et sélectionnez votre groupe de ressources, puis sélectionnez votre application.

  3. Dans le menu gauche de votre application, sélectionnez Authentification, puis Ajouter un fournisseur d’identité.

  4. Dans la page Ajouter un fournisseur d’identité, sélectionnez Microsoft en tant que fournisseur d’identité pour vous connecter aux identités Microsoft et Microsoft Entra.

  5. Acceptez les paramètres par défaut et sélectionnez Ajouter.

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

Conseil

Si vous rencontrez des erreurs et reconfigurez les paramètres d’authentification de votre application, les jetons dans le magasin de jetons ne peuvent pas être régénérés à partir des nouveaux paramètres. Pour vous assurer que vos jetons sont régénérés, vous devez vous déconnecter et vous reconnecter à votre application. Pour ce faire, vous pouvez simplement utiliser votre navigateur en mode privé, et fermer et ouvrir à nouveau le navigateur en mode privé après avoir modifié les paramètres dans vos applications.

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

Actuellement, votre application Azure se connecte à SQL Database et utilise l’authentification SQL (nom d’utilisateur et mot de passe) gérée en tant que paramètres d’application. Dans cette étape, vous accordez à l’application les autorisations d’accès à 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é. L’inscription de cette application a été automatiquement générée pour vous. Dans le menu gauche, sélectionnez Autorisations d’API.

  2. Sélectionnez Ajouter une autorisation, puis API utilisées par mon organisation .

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

  4. Dans la page Demander des autorisations d’API pour Azure SQL Database, sélectionnez Autorisations déléguées et user_impersonation, puis sélectionnez Ajouter des autorisations.

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

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

L’inscription de l’application dans Microsoft Entra ID dispose désormais des autorisations requises pour se connecter à SQL Database en empruntant l’identité de l’utilisateur connecté. Ensuite, vous configurez votre application App Service pour qu’elle vous donne un jeton d’accès utilisable.

Dans Cloud Shell, exécutez les commandes suivantes sur l’application pour ajouter le paramètre scope au paramètre d’authentification identityProviders.azureActiveDirectory.login.loginParameters. Il 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"

Les commandes ajoutent une propriété loginParameters avec des étendues personnalisées supplémentaires. Voici une explication des étendues demandées :

  • openid, profile et email sont déjà demandés par App Service par défaut. Pour plus d’informations, consultez Étendues OpenID Connect.
  • https://database.windows.net/user_impersonation fait référence à Azure SQL Database. C’est l’étendue qui vous donne un jeton JWT qui inclut SQL Database comme audience de jeton.
  • offline_access est inclus ici pour des raisons pratiques (au cas où vous souhaiteriez actualiser des jetons).

Conseil

Pour configurer les étendues requises avec une interface web à la place, consultez les étapes de Microsoft dans Actualiser les jetons d’authentification.

Vos applications sont désormais configurées. L’application peut maintenant générer un jeton que SQL Database accepte.

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

Les étapes à suivre pour votre projet varient selon que vous utilisez Entity Framework (par défaut pour ASP.NET) ou Entity Framework Core (par défaut pour ASP.NET Core).

  1. Dans Visual Studio, ouvrez la console du gestionnaire de package et mettez à jour Entity Framework :

    Update-Package EntityFramework
    
  2. Dans votre objet DbContext (dans Models/MyDbContext.cs), ajoutez le code suivant au constructeur par défaut.

    var conn = (System.Data.SqlClient.SqlConnection)Database.Connection;
    conn.AccessToken = System.Web.HttpContext.Current.Request.Headers["X-MS-TOKEN-AAD-ACCESS-TOKEN"];
    

Notes

Le code ajoute le jeton d’accès fourni par l’authentification App Service à l’objet de connexion.

Cette modification de code ne fonctionne pas localement. Pour plus d’informations, consultez Comment déboguer localement lors de l’utilisation de l’authentification App Service ?.

6. Publier vos modifications

  1. Si vous venez du tutoriel : créer une application ASP.NET dans Azure avec SQL Database, vous définissez une chaîne de connexion dans App Service à l’aide de l’authentification SQL, avec un nom d’utilisateur et un mot de passe. Utilisez la commande suivante pour supprimer les secrets de connexion, mais remplacez <group-name>, <app-name>, <db-server-name> et <db-name> par les vôtres.

    az webapp config connection-string set --resource-group <group-name> --name <app-name> --connection-string-type SQLAzure --settings MyDbConnection="server=tcp:<db-server-name>.database.windows.net;database=<db-name>;"
    
  2. Publiez vos modifications dans Visual Studio. Dans l’Explorateur de solutions, cliquez avec le bouton droit sur le projet DotNetAppSqlDb, puis sélectionnez Publier.

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

  3. Dans la page de publication, sélectionnez Publier.

Lorsque la nouvelle page web affiche votre liste de tâches, votre application se connecte à la base de données pour le compte de l’utilisateur Microsoft Entra connecté.

Application Azure après l’activation des Migrations Code First

Vous devriez désormais être en mesure de modifier la liste des tâches comme auparavant.

7. Nettoyer les ressources

Au cours des étapes précédentes, vous avez créé des ressources Azure au sein d’un groupe de ressources. Si vous ne pensez pas avoir besoin de ces ressources à l’avenir, supprimez le groupe de ressources en exécutant la commande suivante dans Cloud Shell :

az group delete --name <group-name>

L’exécution de cette commande peut prendre une minute.

Forum aux questions

Pourquoi est-ce que j’obtiens une erreur Login failed for user '<token-identified principal>'. ?

Les principales causes de cette erreur sont les suivantes :

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

  1. Connectez-vous à votre serveur de base de données, par exemple avec sqlcmd ou SSMS.

  2. Créez des utilisateurs autonomes mappés à des identités Microsoft Entra dans la documentation de SQL Database.

    L’exemple Transact-SQL suivant ajoute une identité Microsoft Entra à SQL Server et lui donne des 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é dans Azure, il n’est pas possible que le même code fonctionne dans votre environnement local. Contrairement à l’application exécutée dans Azure, votre code local ne bénéficie pas du middleware d’authentification d’App Service. Quelques alternatives s’offrent à vous :

  • Connectez-vous à SQL Database à partir de votre environnement local avec Active Directory Interactive. Le flux d’authentification ne connecte pas l’utilisateur à l’application elle-même, mais il se connecte à la base de données principale avec l’utilisateur connecté et vous permet de tester l’autorisation de base de données localement.
  • Copiez manuellement le jeton d’accès à partir de https://<app-name>.azurewebsites.net/.auth/me dans votre code, à la place de l’en-tête de demande X-MS-TOKEN-AAD-ACCESS-TOKEN.
  • 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é.

Étapes suivantes

Vous avez appris à effectuer les opérations suivantes :

  • Activer l’authentification intégrée pour Azure SQL Database
  • Désactiver d’autres options d’authentification dans Azure SQL Database
  • Activer l’authentification App Service
  • Utiliser Microsoft Entra ID comme fournisseur d’identité
  • Accéder à Azure SQL Database pour le compte de l’utilisateur Microsoft Entra connecté