Authentication

S’applique aux applications Dynamics 365 suivantes :
Ressources humaines

Cet article fournit une vue d’ensemble de l’authentification auprès de l’interface de programmation d’applications de données Microsoft Dynamics 365 Human Resources (API).

Overview

L’API de données pour Human Resources est une implémentation OData. Pour plus d’informations, voir Protocole Open Data (OData).

Votre application doit s’authentifier en tant qu’appelant autorisé avant que les services API ne traitent les requêtes de votre application.

Fondamentaux

Pour appeler l’API de données, votre application doit acquérir un jeton d’accès à partir de la plate-forme d’identité Microsoft. Le jeton d’accès contient des informations sur votre application et l’autorisation dont elle dispose pour appeler des ressources dans Human Resources.

Access token (Jeton d’accès)

Les jetons d’accès émis par la plate-forme d’identité Microsoft sont des jetons Web (JWT) JavaScript Object Notation (JSON) codés en base64. Ils contiennent des informations (revendications) que l’API de données (et d’autres API Web sécurisées par la plate-forme d’identité Microsoft) utilisent pour valider l’appelant et s’assurer que l’appelant dispose des autorisations appropriées pour effectuer l’opération qu’il demande. Pendant les appels, vous pouvez traiter les jetons d’accès comme opaques. Vous devez toujours transmettre les jetons d’accès sur un canal sécurisé, tel que TLS (Transport Layer Security) et HTTPS (Hypertext Transfer Protocol Secure).

Voici un exemple de jeton d'accès que le Plateforme d'identités Microsoft émet.

EwAoA8l6BAAU7p9QDpi/D7xJLwsTgCg3TskyTaQAAXu71AU9f4aS4rOK5xoO/SU5HZKSXtCsDe0Pj7uSc5Ug008qTI+a9M1tBeKoTs7tHzhJNSKgk7pm5e8d3oGWXX5shyOG3cKSqgfwuNDnmmPDNDivwmi9kmKqWIC9OQRf8InpYXH7NdUYNwN+jljffvNTewdZz42VPrvqoMH7hSxiG7A1h8leOv4F3Ek/oeJX6U8nnL9nJ5pHLVuPWD0aNnTPTJD8Y4oQTp5zLhDIIfaJCaGcQperULVF7K6yX8MhHxIBwek418rKIp11om0SWBXOYSGOM0rNNN59qNiKwLNK+MPUf7ObcRBN5I5vg8jB7IMoz66jrNmT2uiWCyI8MmYDZgAACPoaZ9REyqke+AE1/x1ZX0w7OamUexKF8YGZiw+cDpT/BP1GsONnwI4a8M7HsBtDgZPRd6/Hfqlq3HE2xLuhYX8bAc1MUr0gP9KuH6HDQNlIV4KaRZWxyRo1wmKHOF5G5wTHrtxg8tnXylMc1PKOtaXIU4JJZ1l4x/7FwhPmg9M86PBPWr5zwUj2CVXC7wWlL/6M89Mlh8yXESMO3AIuAmEMKjqauPrgi9hAdI2oqnLZWCRL9gcHBida1y0DTXQhcwMv1ORrk65VFHtVgYAegrxu3NDoJiDyVaPZxDwTYRGjPII3va8GALAMVy5xou2ikzRvJjW7Gm3XoaqJCTCExN4m5i/Dqc81Gr4uT7OaeypYTUjnwCh7aMhsOTDJehefzjXhlkn//2eik+NivKx/BTJBEdT6MR97Wh/ns/VcK7QTmbjwbU2cwLngT7Ylq+uzhx54R9JMaSLhnw+/nIrcVkG77Hi3neShKeZmnl5DC9PuwIbtNvVge3Q+V0ws2zsL3z7ndz4tTMYFdvR/XbrnbEErTDLWrV6Lc3JHQMs0bYUyTBg5dThwCiuZ1evaT6BlMMLuSCVxdBGzXTBcvGwihFzZbyNoX+52DS5x+RbIEvd6KWOpQ6Ni+1GAawHDdNUiQTQFXRxLSHfc9fh7hE4qcD7PqHGsykYj7A0XqHCjbKKgWSkcAg==

Pour appeler l’API de données, attachez le jeton d’accès en tant que jeton détenteur à l’en-tête d’autorisation dans votre demande HTTP. Voici un exemple.

HTTP/1.1
Authorization: Bearer EwAoA8l6BAAU ... 7PqHGsykYj7A0XqHCjbKKgWSkcAg==
Host: https://{cluster}.hr.talent.dynamics.com
GET https://{cluster}.hr.talent.dynamics.com/namespaces/{namespace_guid}/data/JobTypes

Enregistrement d’une nouvelle application à l’aide du portail Azure

  1. Connectez-vous au portail Microsoft Azure avec un compte professionnel ou scolaire ou un compte personnel Microsoft.

  2. Si votre compte vous donne accès à plusieurs locataires, sélectionnez votre compte dans le coin supérieur droit et définissez votre session de portail sur le locataire Microsoft Entra que vous souhaitez.

  3. Dans le volet gauche, sélectionnez le service Microsoft Entra ID, puis sélectionnez Enregistrements d’applications > Nouvel enregistrement.

  4. Quand la page Enregistrer une applicationapparaît, entrez les informations d’enregistrement de votre application :

    • Nom : entrez un nom d’application explicite que les utilisateurs voient.

    • Types de comptes pris en charge : sélectionnez les types de comptes pris en charge par votre application.

      Types de comptes pris en charge Description
      Comptes dans ce répertoire organisationnel uniquement Sélectionnez cette option si vous créez une application métier. Cette option n’est disponible que si vous enregistrez l’application dans un répertoire.

      Cette option est mappée sur Locataire unique Microsoft Entra seulement.

      Cette option est l’option par défaut, sauf si vous enregistrez l’application en dehors d’un répertoire. Dans ce cas, l’option par défaut est Comptes Microsoft multi-locataires et personnels Microsoft Entra.

      Comptes dans un répertoire organisationnel Sélectionnez cette option pour cibler tous les clients professionnels et éducatifs.

      Cette option est mappée sur Multi-locataire Microsoft Entra seulement.

      Si vous avez enregistré l’application en tant que Locataire unique Microsoft Entra seulement, vous pouvez utiliser le panneau Authentification pour la mettre à jour sur Multi-locataire Microsoft Entra seulement puis revenir à Locataire unique Microsoft Entra seulement.

      Comptes dans n’importe quel répertoire organisationnel et comptes Microsoft personnels Sélectionnez cette option pour cibler le plus grand nombre de clients.

      Cette option est mappée sur Comptes Microsoft multi-locataires et personnels Microsoft Entra.

      Si vous avez enregistré l’application en tant que Comptes Microsoft multi-locataires et personnels Microsoft Entra, vous ne pouvez pas modifier ce paramètre dans l’interface utilisateur (UI). Utilisez plutôt l’éditeur de manifeste d’application pour modifier les types de comptes pris en charge.

    • URI de redirection (facultatif) – Sélectionnez le type d’application que vous créez : Web ou Client public (mobile et bureau). Saisissez ensuite l’URI de redirection (ou l’URL de réponse) pour l’application.

      • Pour les applications Web, indiquez l’URL de base de l’application. Par exemple, http://localhost:31544peut être l’URL d’une application Web qui s’exécute sur votre ordinateur local. Les utilisateurs utilisent ensuite cette URL pour se connecter à une application client Web.
      • Pour les applications clientes publiques, fournissez l’URI qu’Microsoft Entra utilise pour renvoyer des réponses à jeton. Entrez une valeur propre à votre application, telle que myapp://auth.

      Pour voir des exemples spécifiques d’applications Web ou d’applications natives, consultez les démarrages rapides dans Plate-forme d’identité Microsoft (anciennement Microsoft Entra ID pour les développeurs).

  5. Sous Autorisations API, sélectionnez Ajouter une autorisation. Ensuite, dans l’onglet API utilisées par mon organisation, recherchez Dynamics 365 Human Resources et ajoutez l’autorisation user_impersonation à votre application. L’ID d’application pour Human Resources est f9be0c49-aa22-4ec6-911a-c5da515226ff. Utilisez cet ID pour vous assurer que vous avez choisi la bonne application.

  6. Sélectionnez Inscrire.

    Enregistrement d’une nouvelle application dans le portail Azure.

Microsoft Entra attribue un ID d’application unique (ID client) à votre application et vous amène à la page Aperçu pour votre application. Pour ajouter d’autres fonctionnalités à votre application, sélectionnez d’autres options de configuration, telles que les options de personnalisation et pour les certificats et les secrets.

Récupération d’un jeton d’accès

La méthode permettant de récupérer un jeton d’accès pour appeler l’API de données Ressources humaines dépend des technologies que vous utilisez pour développer votre application cliente. Par exemple, vous pouvez tester avec un utilitaire tiers, développer une application console C# ou un service web, ou générer un client JavaScript/TypeScript.

Exemple d’application client C# :

using System;
using System.Net.Http;
using System.Threading.Tasks;

// requires appropriate NuGet package references in the project
using Microsoft.IdentityModel.Clients.ActiveDirectory;

namespace TalentODataPoC
{
    class Program
    {
        // prereq: This client app must be registered in Microsoft Entra ID. The app must be
        // registered as requiring permission to the Dynamics 365 for Talent API (with the Dynamics
        // HCM Workload delegated permission).
        static string clientId = "00001111-aaaa-2222-bbbb-3333cccc4444"; // This value should be obtained from Microsoft Entra and must match your registered app
        static string talentNamespaceUri = "";

        public static async Task CallTalentODataService()
        {
            // authority URI
            UriBuilder uri = new UriBuilder("https://login.microsoftonline.com/common");
            AuthenticationContext authenticationContext = new AuthenticationContext(uri.ToString());

            // request token for the resource we want to access (Human Resources). This will authenticate
            // the user and return an access token containing claims for the authenticated user.
            var authResult = await authenticationContext.AcquireTokenAsync(
                "http://hr.talent.dynamics.com", /*Talent app id or resource URI*/
                clientId, /*registered client app id*/
                new Uri("https://localhost"), /*redirect URI, as registered in your Microsoft Entra app*/
                new PlatformParameters(PromptBehavior.SelectAccount));

            // create the authorization header, which needs to be passed in the Header of the HTTP Requests to Talent
            string authHeader = authResult.CreateAuthorizationHeader();

            // HINT: paste the JWT into https://jwt.ms to decode and view it
            Console.Write("authHeader: ");
            Console.WriteLine(authHeader);
            Console.WriteLine();

            HttpClient client = new HttpClient();
            client.DefaultRequestHeaders.Add("Authorization", authHeader);

            string s;

            Console.Write("Talent Namespace URI: ");
            Console.WriteLine(talentNamespaceUri);
            Console.WriteLine();

            // call the OData service to get JobType data from Talent
            var resultOdata = await client.GetAsync(talentNamespaceUri + "data/JobTypes");
            s = await resultOdata.Content.ReadAsStringAsync();
            Console.WriteLine(s);
            Console.WriteLine();
        }

        static void Main(string[] args)
        {
            Console.WriteLine();

            // if the user passes in a single parameter, assume it is the namespaceUri for Talent
            if (args.Length == 1)
            {
                talentNamespaceUri = args[0];
            } else if (args.Length == 0)
            {
                Console.WriteLine("Enter Talent URL including namespace.");
                Console.WriteLine("Example: https://aos-rts-sf-21454f9d830-prod-westus2.hr.talent.dynamics.com/namespaces/2328af1a-2d45-4c6a-99e3-12a4c3867dcf/");
                Console.Write("> ");
                talentNamespaceUri = Console.ReadLine();
                if (!talentNamespaceUri.EndsWith("/"))
                {
                    talentNamespaceUri = talentNamespaceUri + "/";
                }
            } else
            {
                Console.WriteLine("Unexpected Arguments");
                System.Environment.Exit(1);
            }

            Task t = Program.CallTalentODataService();
            t.Wait();
        }
    }
}

Après avoir récupéré un jeton d’accès, transmettez le jeton dans l’en-tête Authorization en tant que jeton du porteur avec chaque requête que vous envoyez à l’API de données, comme décrit précédemment.