Authentication

Se aplica a estas aplicaciones de Dynamics 365:
Recursos humanos

En este artículo se proporciona información general sobre cómo autenticarse con la interfaz de programación de aplicaciones de datos (API) de Microsoft Dynamics 365 Human Resources.

Información general

La API de datos para Recursos Humanos es una implementación de OData. Para obtener más información, consulte Open Data Protocol (OData).

La aplicación debe autenticarse como un cliente autorizado antes de que los servicios de la API atiendan las solicitudes de su aplicación.

Fundamentals

Para llamar a la API de datos, su aplicación debe adquirir un token de acceso de la plataforma de identidad de Microsoft. El token de acceso contiene información sobre su aplicación y el permiso que tiene para llamar a recursos de Recursos humanos.

Token de acceso

Los tokens de acceso emitidos por la plataforma de identidad de Microsoft son tokens web (JWT) de JavaScript Object Notation (JSON) codificados en base64. Contienen información (notificaciones) que la API de datos (y otras API web que están protegidas por la plataforma de identidad de Microsoft) utilizan para validar a la persona que llama y asegurarse de que la persona que llama tenga los permisos correctos para realizar la operación que solicita. Durante las llamadas, puede tratar los tokens de acceso como opacos. Siempre debe transmitir tokens de acceso a través de un canal seguro, como Transport Layer Security (TLS) y Hypertext Transfer Protocol Secure (HTTPS).

Este es un ejemplo de un token de acceso que emite el Plataforma de identidad de Microsoft.

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==

Para llamar a la API de datos, adjunte el token de acceso como token de portador al encabezado de autorización en la solicitud HTTP. Este es un ejemplo.

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

Registre una aplicación nueva mediante el portal de Azure

  1. Inicie sesión en el portal de Microsoft Azure con una cuenta profesional o educativa, o una cuenta de Microsoft personal.

  2. Si su cuenta le da acceso a más de un inquilino, seleccione su cuenta en la esquina superior derecha y configure su sesión de portal en el inquilino de Microsoft Entra que desee.

  3. En el panel izquierdo, seleccione el servicio de Microsoft Entra ID y luego seleccione Registros de aplicaciones > Nuevo registro.

  4. Cuando aparezca la página Registrar una aplicación, introduzca la información de registro de su aplicación:

    • Nombre: escriba un nombre de aplicación significativo que ven los usuarios.

    • Tipos de cuenta admitidos: seleccione los tipos de cuentas que admite la aplicación.

      Tipos de cuenta admitidos Descripción
      Cuentas en el directorio de esta organización solo Seleccione esta opción si está creando una aplicación de línea de negocio. Esta opción no está disponible a menos que esté registrando la aplicación en un directorio.

      Esta opción está asignada a Inquilino único de Microsoft Entra.

      Esta opción es la predeterminada a menos que esté registrando la aplicación fuera de un directorio. En ese caso, la opción predeterminada es Cuentas de Microsoft personales y multiinquilino de Microsoft Entra.

      Cuentas en cualquier directorio de organización Seleccione esta opción para tener como objetivos todos los clientes empresariales y educativos.

      Esta opción está asignada a Inquilino múltiple solo de Microsoft Entra.

      Si ha registrado la aplicación como Solo inquilino único de Microsoft Entra, puede usar la hoja Autenticación para actualizarla a Solo multiinquilino de Microsoft Entra y luego de nuevo a Solo inquilino único de Microsoft Entra.

      Cuentas en cualquier cuenta de Microsoft personal y directorio de organización Seleccione esta opción para dirigirse al conjunto más amplio de clientes.

      Esta opción se asigna a Cuentas de Microsoft personales y multiinquilino de Microsoft Entra.

      Si ha registrado la aplicación como Cuentas de Microsoft personal y multiinquilino de Microsoft Entra, no puede cambiar esta configuración en la interfaz de usuario (IU). En su lugar, use el editor de manifiestos de aplicación para cambiar los tipos de cuenta admitidos.

    • URI de redireccionamiento (opcional): seleccione el tipo de aplicación que está creando: Web o Cliente público (móvil y de escritorio). A continuación, introduzca el URI de redireccionamiento (o URL de respuesta) para la aplicación.

      • Para aplicaciones web, proporcione la URL base de la aplicación. Por ejemplo, http://localhost:31544 podría ser la URL de una aplicación web que se ejecuta en su máquina local. A continuación, los usuarios usan esta dirección URL para iniciar sesión en una aplicación cliente web.
      • Para aplicaciones de cliente público, proporcione el URI que Microsoft Entra utiliza para devolver respuestas de token. Escriba un valor específico de la aplicación, como myapp://auth.

      Para ver ejemplos específicos de aplicaciones web o aplicaciones nativas, consulte los tutoriales rápidos en Plataforma de identidad de Microsoft (anteriormente, Microsoft Entra ID para desarrolladores).

  5. En Permisos de API, seleccione Agregar un permiso. Después, en la pestaña API que usa mi organización, busque Dynamics 365 Human Resources y agregue el permiso user_impersonation a su aplicación. El id. de aplicación para Recursos Humanos es f9be0c49-aa22-4ec6-911a-c5da515226ff. Use este id. para asegurarse de haber elegido la aplicación correcta.

  6. Seleccione Registrar.

    Registro de una aplicación nueva en el portal de Azure.

Microsoft Entra asigna un id. de aplicación único (id. de cliente) a su aplicación y lo lleva a la página Visión general para su aplicación. Para agregar más funcionalidades a la aplicación, seleccione otras opciones de configuración, como opciones de personalización de marca y para certificados y secretos.

Recuperación de un token de acceso

El método para recuperar un token de acceso para llamar a la API de datos de recursos humanos depende de las tecnologías que use para desarrollar la aplicación cliente. Por ejemplo, puede probar con una utilidad de terceros, desarrollar una aplicación de consola de C# o un servicio web, o compilar un cliente javaScript/TypeScript.

Aplicación de cliente C# de ejemplo:

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();
        }
    }
}

Después de recuperar un token de acceso, pase el token en el Authorization encabezado como un token de portador con cada solicitud que envíe a la API de datos, como se ha descrito anteriormente.