S’authentifier par rapport à Microsoft Dataverse à l’aide d’OAuth

Effectué

Microsoft Dataverse utilise OAuth 2.0 comme norme d’authentification. OAuth 2.0 fournit une norme sectorielle afin d’authentifier les applications clientes et de leur accorder l’accès à une ressource.

Authentification et autorisation

L’authentification est le processus ou l’action de vérification de l’identité d’un utilisateur ou d’un processus. La solution de Microsoft pour ce processus de vérification est Microsoft Entra ID. Entra ID prend en charge de nombreuses options pour vérifier l’identité d’un utilisateur ou d’un processus. L’abstraction de votre fournisseur d’identité permet de bien séparer vos préoccupations, car la gestion des noms d’utilisateur et des mots de passe peut être un processus difficile (et risqué).

Remarque

Microsoft Entra ID est le nouveau nom d’Azure Active Directory. Toutes les licences et fonctionnalités restent les mêmes.

L’autorisation est le processus ou l’action consistant à vérifier si un utilisateur authentifié est autorisé à accéder à une ressource. À l’heure actuelle, l’autorisation de Dataverse se situe au niveau de l’abonné Entra ID, tandis que la gestion des autorisations détaillées est déléguée à l’application en fonction de l’utilisateur connecté actuellement. Par conséquent, OAuth 2.0 ne vous permet pas de régir la sécurité au niveau de l’application, que vous géreriez avec les rôles de sécurité Dataverse et l’affectation aux utilisateurs avec le Centre d’administration Power Apps.

Si vous souhaitez en savoir plus sur les concepts d’authentification et d’autorisation, consultez Principes de base de l’authentification.

Inscrire des applications Dataverse auprès d’Entra ID

Pour vous connecter avec succès à Dataverse, vous devez d’abord inscrire une application auprès d’Entra ID, ce que vous pouvez réaliser sur le portail Azure. Selon le type d’application que vous souhaitez créer, vous pouvez configurer plusieurs paramètres différents (applications web ou applications natives installées en mode natif sur un appareil). Pour en savoir plus sur les paramètres requis pour chaque type, consultez Types d’inscription d’application.

Pour inscrire une application auprès d’Entra ID, vous pouvez accéder à la section Inscriptions d’applications du menu Entra ID (Azure Active Directory), puis cliquer sur Nouvelle inscription.

Spécifiez le nom de votre application et le type d’accès au compte dont vous avez besoin. Si vous inscrivez une application web, spécifiez une URI de redirection en accédant à la section Authentification, en définissant le type sur Web, puis en saisissant une URI de redirection.

La liste suivante résume les scénarios au cours desquels utiliser les différents types de comptes :

  • Comptes dans ce répertoire organisationnel uniquement (client unique)

    Tous les comptes d’utilisateur et d’invité de votre répertoire peuvent utiliser votre application ou votre API.

    Utilisez cette option si votre audience cible est interne à votre organisation.

  • Comptes de tout répertoire organisationnel (tout répertoire Entra ID - partagé au sein d’une architecture mutualisée)

    Tous les utilisateurs disposant d’un compte professionnel ou scolaire auprès de Microsoft peuvent utiliser votre application ou votre API, y compris les écoles et les entreprises utilisant Microsoft 365.

    Utilisez cette option si votre audience cible concerne les clients commerciaux ou scolaires, et pour activer l’architecture mutualisée.

  • Comptes dans tout répertoire organisationnel (tout répertoire Entra ID - partagé au sein d’une architecture mutualisée) et les comptes Microsoft personnels (par exemple Skype et Xbox)

    Tous les utilisateurs disposant d’un compte professionnel, scolaire ou personnel Microsoft peuvent utiliser votre application ou votre API. Cela inclut les écoles et les entreprises qui utilisent Microsoft 365 et les comptes personnels permettant de se connecter à des services tels que Xbox et Skype.

Selon la complexité de la configuration de votre application, vous souhaiterez peut-être configurer d’autres paramètres d’authentification. Consultez la documentation relative à Entra ID pour découvrir comment effectuer cette tâche.

Accéder à Dataverse à l’aide de l’API web

Tout accès à Dataverse s’effectue dans le contexte d’un utilisateur connecté. Il peut s’agir d’un utilisateur interactif normal ou d’un utilisateur non interactif utilisant l’authentification S2S (server-to-server).

Lorsqu’une application accède à Dataverse au nom d’un utilisateur interactif, l’application inscrite doit être configurée avec des autorisations d’API pour accéder à Dataverse avec une autorisation déléguée. Lorsqu’une application accède directement à Dataverse, un utilisateur de l’application associé à l’inscription d’application Entra ID doit être créé dans Dataverse. Lorsque vous utilisez l’authentification S2S, les autorisations déléguées d’API Dataverse ne sont pas requises.

Dans tous les cas, les utilisateurs authentifiés doivent avoir des rôles de sécurité Dataverse associés à l’utilisateur autorisant les opérations que vous effectuez à l’aide de l’API web.

Configurer les autorisations d’API

Si votre application accède à Dataverse pour le compte d’un utilisateur connecté, accédez à l’onglet Autorisations d’API sur l’application inscrite et veillez à accorder à votre application un accès avec emprunt d’identité utilisateur à votre environnement Dataverse.

Le libellé indique « Dynamics CRM », qui est l’ancien nom du produit précurseur de Dataverse.

Configurer un utilisateur de l’application Dataverse

Lorsque vous utilisez l’authentification S2S, un utilisateur de l’application Dataverse doit être configuré dans chaque environnement Dataverse auquel vous accédez avec l’API web.

La configuration des utilisateurs de l’application Dataverse se fait à partir du Centre d’administration Power Platform en tant qu’administrateur système.

Depuis le Centre d’administration, vous pouvez effectuer les étapes suivantes :

  • Créer un utilisateur d’application

  • Associer l’utilisateur de l’application à l’application Entra ID ou une identité gérée

  • Configurer les rôles de sécurité Dataverse qui s’appliquent

Pour un examen plus détaillé étape par étape, consultez Gérer les utilisateurs de l’application dans le Centre d’administration Power Platform.

Se connecter à l’aide des bibliothèques d’authentification

Une fois votre application inscrite, effectuez l’authentification et acquérez un jeton d’accès à utiliser avec l’API web à l’aide de l’une des bibliothèques d’authentification de la plateforme d’identités Microsoft.

Le code suivant est un extrait de l’exemple Démarrage rapide amélioré qui utilise la bibliothèque d’authentification Microsoft (MSAL). La classe OAuthMessageHandler suivante implémente une classe dérivée de DelegatingHandler que vous transmettez au constructeur du HttpClient. Ce gestionnaire vous permet de remplacer la méthode HttpClient.SendAsync afin que le jeton d’accès soit rafraîchi par les appels de méthode AcquireToken* avec chaque requête envoyée par le client HTTP.

class OAuthMessageHandler : DelegatingHandler
{
  private AuthenticationHeaderValue authHeader;
  public OAuthMessageHandler(string serviceUrl, string clientId, string redirectUrl, string username, string password, HttpMessageHandler innerHandler)
  : base(innerHandler)
  {
    //Build Microsoft.Identity.Client (MSAL) OAuth Token Request
    var clientApplication = PublicClientApplicationBuilder.Create(clientId)
    .WithAuthority(AadAuthorityAudience.AzureAdMultipleOrgs)
    .WithRedirectUri(redirectUrl)
    .Build();
    var scope = serviceUrl + "//.default";
    string[] scopes = { scope };
    AuthenticationResult authBuilderResult;
    if (username != string.Empty && password != string.Empty)
    {
      //Make silent Microsoft.Identity.Client (MSAL) OAuth Token Request
      var securePassword = new SecureString();
      foreach (char ch in password) securePassword.AppendChar(ch);
      authBuilderResult = clientApplication.AcquireTokenByUsernamePassword(scopes, username, securePassword).ExecuteAsync().Result;
    }
    else
    {
      //Popup authentication dialog box to get token
      authBuilderResult = clientApplication.AcquireTokenInteractive(scopes).ExecuteAsync().Result;
    }
      //Note that an Entra ID access token has a finite lifetime, default expiration is 60 minutes.
      authHeader = new AuthenticationHeaderValue("Bearer", authBuilderResult.AccessToken);
    }
  protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
  {
    request.Headers.Authorization = authHeader;
    return base.SendAsync(request, cancellationToken);
  }
}

Vous pourriez alors avoir une méthode d’assistance pour obtenir l’instance HttpClient à l’aide du gestionnaire :

static HttpClient GetHttpClient(string url, string clientId, string redirectUrl, string version = "v9.2")
{
  try
  {
    HttpMessageHandler messageHandler = new OAuthMessageHandler(url, clientId, redirectUrl, "", "",
    new HttpClientHandler());
    HttpClient httpClient = new HttpClient(messageHandler)
    {
      BaseAddress = new Uri(string.Format("{0}/api/data/{1}/", url, version)),
      Timeout = new TimeSpan(0, 2, 0) //2 minutes
    };
  return httpClient;
  }
  catch (Exception)
  {
    throw;
  }
}

Enfin, effectuez un appel d’API web à l’aide de l’instance client :

using (HttpClient client = GetHttpClient("https://yourenvname.api.crm.dynamics.com", "51f81489-12ee-4a9e-aaae-a2591f45987d", "http://localhost:8080"))
{
  // Use the WhoAmI function
  var response = client.GetAsync("WhoAmI").Result;
  if (response.IsSuccessStatusCode)
  {
    //Get the response content and parse it.
    JObject body = JObject.Parse(response.Content.ReadAsStringAsync().Result);
    Guid userId = (Guid)body["UserId"];
    Console.WriteLine("Your UserId is {0}", userId);
  }
  else
  {
    Console.WriteLine("The request failed with a status of '{0}'", response.ReasonPhrase);
  }
  Console.WriteLine("Press any key to exit.");
  Console.ReadLine();
}

Vous devriez désormais disposer d’une application inscrite qui peut se connecter avec succès à votre environnement Dataverse. Vous disposez également d’un exemple simple de connexion et d’utilisation de l’application inscrite pour accéder à une opération d’API web.