Cómo configurar aplicaciones de servicio que llaman a API web

Se aplica a: Círculo verde con un símbolo de verificación blanca que indica que el siguiente contenido se aplica a los inquilinos de la fuerza laboral. Inquilinos de la fuerza laboral (más información)

Aprende a configurar el código de la aplicación daemon que llama a las API web.

Bibliotecas de Microsoft que admiten aplicaciones de demonio

Las siguientes bibliotecas de Microsoft admiten aplicaciones daemon:

Lenguaje/marco de trabajo Proyecto sobre
GitHub
Paquete Introducción
iniciado
Iniciar sesión de usuarios Acceso a API web Disponible con carácter general (GA) o
Versión preliminar pública1
.NET MSAL.NET Microsoft.Identity.Client Guía de inicio rápido La biblioteca no puede solicitar tokens de ID para el inicio de sesión del usuario. La biblioteca puede solicitar tokens de acceso para las API web protegidas. GA
Java MSAL4J msal4j La biblioteca no puede solicitar tokens de identificador para el inicio de sesión del usuario. La biblioteca puede solicitar tokens de acceso para las API web protegidas. GA
Nodo Nodo MSAL msal-node Guía de inicio rápido La biblioteca no puede solicitar tokens de ID para el inicio de sesión del usuario. La biblioteca puede solicitar tokens de acceso para las API web protegidas. GA
Python MSAL Python msal-python Guía de inicio rápido La biblioteca no puede solicitar tokens de ID para el inicio de sesión del usuario. La biblioteca puede solicitar tokens de acceso para las API web protegidas. GA

1Los términos de licencia universales para Servicios en línea se aplican a las bibliotecas en versión preliminar pública.

Configuración de la autoridad

Las aplicaciones de demonio usan permisos de aplicación en lugar de permisos delegados. Por lo tanto, el tipo de cuenta admitido no puede ser una cuenta en ningún directorio de la organización ni una cuenta de Microsoft personal (por ejemplo, Skype, Xbox, Outlook.com). No hay un administrador del inquilino que pueda conceder el consentimiento a una aplicación daemon para una cuenta personal de Microsoft. Debe elegir Cuentas de mi organización o Cuentas de cualquier organización.

La autoridad especificada en la configuración de la aplicación debe incluir el identificador de inquilino o un nombre de dominio asociado a la organización.

Incluso si quisiera proporcionar una herramienta para varios inquilinos, debería usar un id. de inquilino o un nombre de dominio y nocommon o organizations con este flujo, ya que el servicio no puede deducir de manera confiable qué inquilino debería usarse.

Configuración y creación de instancias de la aplicación

En las Bibliotecas de autenticación de Microsoft (MSAL), las credenciales del cliente (secreto o certificado) se proporcionan como parámetro al crear la aplicación cliente confidencial.

Importante

Aunque la aplicación sea una aplicación de consola que se ejecuta como servicio, si es una aplicación daemon, debe ser una aplicación cliente confidencial.

Archivo de configuración

El archivo de configuración define:

  • La instancia de nube y el identificador de inquilino, que forman la autoridad.
  • El id. de cliente que obtuvo al registrar la aplicación.
  • Un secreto de cliente o un certificado.

Este es un ejemplo de definición de la configuración en un archivo de configuración deappsettings.json ejemplo. Este ejemplo se ha tomado del ejemplo de código del demonio de consola de .NET de GitHub.

{
    "AzureAd": {
        "Instance": "https://login.microsoftonline.com/",
        "TenantId": "[Enter here the tenantID or domain name for your Azure AD tenant]",
        "ClientId": "[Enter here the ClientId for your application]",
        "ClientCredentials": [
            {
                "SourceType": "ClientSecret",
                "ClientSecret": "[Enter here a client secret for your application]"
            }
        ]
    }
}

Debe proporcionar un certificado en lugar del secreto de cliente o las credenciales de federación de identidad de carga de trabajo.

Creación de una instancia de la aplicación MSAL

Para crear una instancia de la aplicación MSAL, agregue o importe el paquete MSAL (dependiendo del lenguaje), o haga referencia a él.

La construcción es diferente dependiendo de si usa secretos de cliente o certificados (o, como un escenario avanzado, aserciones firmadas).

Haga referencia al paquete

Haga referencia al paquete MSAL en el código de la aplicación.

Agregue el paquete NuGet Microsoft.Identity.Web.TokenAcquisition a la aplicación. Como alternativa, si deseara llamar a Microsoft Graph, agregue el paquete Microsoft.Identity.Web.GraphServiceClient. El proyecto podría ser como sigue. El archivo appsettings.json debe copiarse en el directorio de salida.

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net7.0</TargetFramework>
    <RootNamespace>daemon_console</RootNamespace>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.Identity.Web.GraphServiceClient" Version="2.12.2" />
  </ItemGroup>

  <ItemGroup>
    <None Update="appsettings.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
  </ItemGroup>
</Project>

En el archivo Program.cs, agregue una directiva using en el código para hacer referencia a Microsoft.Identity.Web.

using Microsoft.Identity.Abstractions;
using Microsoft.Identity.Web;

Creación de una instancia de aplicación cliente confidencial con un secreto de cliente

Este es el código para crear una instancia de aplicación cliente confidencial con un secreto de cliente:

En el ejemplo siguiente se crea la aplicación cliente confidencial mediante un secreto de cliente con Microsoft. Identity.Web:

   class Program
    {
        static async Task Main(string[] _)
        {
            // Get the Token acquirer factory instance. By default it reads an appsettings.json
            // file if it exists in the same folder as the app (make sure that the 
            // "Copy to Output Directory" property of the appsettings.json file is "Copy if newer").
            TokenAcquirerFactory tokenAcquirerFactory = TokenAcquirerFactory.GetDefaultInstance();

            // Configure the application options to be read from the configuration
            // and add the services you need (Graph, token cache)
            IServiceCollection services = tokenAcquirerFactory.Services;
            services.AddMicrosoftGraph();
            // By default, you get an in-memory token cache.
            // For more token cache serialization options, see https://aka.ms/msal-net-token-cache-serialization

            // Resolve the dependency injection.
            var serviceProvider = tokenAcquirerFactory.Build();

            // ...
        }
    }

La configuración se lee desde appsettings.json:

Creación de una instancia de aplicación cliente confidencial con un certificado de cliente

Este es el código para compilar una aplicación con un certificado:

El código de construcción de la aplicación es el mismo que el ejemplo de secreto de cliente. La única diferencia es que el certificado se describe en la configuración en lugar de un secreto. Hay muchas maneras de obtener el certificado. Para obtener más información, consulte Uso de certificados con Microsoft Identity Web. En el ejemplo de configuración siguiente se muestra cómo recuperar el certificado de Azure Key Vault. La identidad de Microsoft se delega en DefaultAzureCredential de Azure Identity y usó la identidad administrada cuando estuvo disponible para acceder al certificado desde KeyVault. Puede depurar su aplicación localmente porque DefaultAzureCredential usa sus credenciales de desarrollador.

  "ClientCredentials": [
      {
        "SourceType": "KeyVault",
        "KeyVaultUrl": "https://yourKeyVaultUrl.vault.azure.net",
        "KeyVaultCertificateName": "NameOfYourCertificate"
      }

Escenario avanzado: Creación de una instancia de aplicación cliente confidencial con aserciones de cliente

Además de usar un secreto de cliente o un certificado, las aplicaciones cliente confidenciales también pueden demostrar su identidad mediante aserciones de cliente. Consulte CredentialDescription para obtener más información.

Pasos siguientes

Avance al siguiente artículo de este escenario, Obtención de un token para la aplicación.