Procedimiento para configurar aplicaciones de demonio que llaman a las API web

Aprenda a configurar el código para la aplicación de demonio que llama a las API web.

Bibliotecas de Microsoft que admiten aplicaciones de demonio

Las bibliotecas de Microsoft siguientes admiten aplicaciones de demonio:

Lenguaje/marco de trabajo Proyecto en
GitHub
Paquete Introducción
iniciado
Inicio de 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 de usuario. La biblioteca puede solicitar tokens de acceso para las API web protegidas. GA
Java MSAL4J msal4j La biblioteca no puede solicitar tokens de id. para el inicio de sesión de usuario. La biblioteca puede solicitar tokens de acceso para las API web protegidas. GA
Nodo MSAL Node msal-node Guía de inicio rápido La biblioteca no puede solicitar tokens de id. para el inicio de sesión de 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 de usuario. La biblioteca puede solicitar tokens de acceso para las API web protegidas. GA

1Los términos de licencia universal de Online Services se aplican a las bibliotecas en la 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 ningún administrador de inquilinos para otorgar consentimiento a una aplicación de demonio para una cuenta de Microsoft personal. 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 tener inquilinos (con identificador o 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 MSAL, las credenciales del cliente (secreto o certificado) se pasan como parámetro de la construcción de la aplicación cliente confidencial.

Importante

Aunque se trate de una aplicación de consola que se ejecuta como servicio, si es una aplicación de demonio 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 identificador de cliente que recibió del registro de la aplicación.
  • Un secreto de cliente o un certificado.

A continuación se muestra un ejemplo de definición de la configuración en un archivo appsettings.json. 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:

   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 en sí es exactamente el mismo. El certificado se describe en la configuración. Hay muchas maneras de obtener el certificado. Para obtener más información, vea https://aka.ms/ms-id-web-certificates. Este es el procedimiento para obtener el certificado de KeyVault. 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. Se puede depurar la aplicación localmente ya que, después, usará las 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.