Aplicación de demonio que llama a las API web: configuración de código

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 uso complementarios para las versiones preliminares de Microsoft Azure 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 quiere proporcionar una herramienta para varios inquilinos, debe usar un id. de inquilino o un nombre de dominio y no debe usar common o organizations con este flujo, ya que el servicio no puede deducir de manera confiable qué inquilino debe 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 Demonio de consola de .NET Core de GitHub.

{
  "Instance": "https://login.microsoftonline.com/{0}",
  "Tenant": "[Enter here the tenantID or domain name for your Azure AD tenant]",
  "ClientId": "[Enter here the ClientId for your application]",
  "ClientSecret": "[Enter here a client secret for your application]",
  "CertificateName": "[Or instead of client secret: Enter here the name of a certificate (from the user cert store) as registered with your application]"
}

Proporcione ClientSecret o CertificateName. Estos valores son excluyentes.

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.Client a la aplicación y, a continuación, agregue una directiva using en el código para hacer referencia a él.

En MSAL.NET, la aplicación cliente confidencial está representada por la interfaz IConfidentialClientApplication.

using Microsoft.Identity.Client;
IConfidentialClientApplication app;

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:

app = ConfidentialClientApplicationBuilder.Create(config.ClientId)
           .WithClientSecret(config.ClientSecret)
           .WithAuthority(new Uri(config.Authority))
           .Build();

El elemento Authority es una concatenación de la instancia de nube y el identificador de inquilino, por ejemplo https://login.microsoftonline.com/contoso.onmicrosoft.com o https://login.microsoftonline.com/eb1ed152-0000-0000-0000-32401f3f9abd. En el archivo appsettings.json que se muestra en la sección Archivo de configuración, estos se representan mediante los valores Instance y Tenant, respectivamente.

En el ejemplo de código del que se tomó el fragmento de código anterior, Authority es una propiedad de la clase AuthenticationConfig y se define como tal:

/// <summary>
/// URL of the authority
/// </summary>
public string Authority
{
    get
    {
        return String.Format(CultureInfo.InvariantCulture, Instance, Tenant);
    }
}

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:

X509Certificate2 certificate = ReadCertificate(config.CertificateName);
app = ConfidentialClientApplicationBuilder.Create(config.ClientId)
    .WithCertificate(certificate)
    .WithAuthority(new Uri(config.Authority))
    .Build();

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

En lugar de un secreto de cliente o un certificado, la aplicación cliente confidencial también puede demostrar su identidad mediante aserciones de cliente.

MSAL.NET tiene dos métodos para proporcionar aserciones firmadas a la aplicación cliente confidencial:

  • .WithClientAssertion()
  • .WithClientClaims()

Cuando use WithClientAssertion, proporcione un JWT firmado. Este escenario avanzado se detalla en las aserciones de cliente.

string signedClientAssertion = ComputeAssertion();
app = ConfidentialClientApplicationBuilder.Create(config.ClientId)
                                          .WithClientAssertion(signedClientAssertion)
                                          .Build();

Cuando utilice WithClientClaims, MSAL .NET producirá una aserción firmada que contiene las notificaciones esperadas por Azure AD más las notificaciones de cliente adicionales que se quieren enviar. Este código muestra cómo hacerlo:

string ipAddress = "192.168.1.2";
var claims = new Dictionary<string, string> { { "client_ip", ipAddress } };
X509Certificate2 certificate = ReadCertificate(config.CertificateName);
app = ConfidentialClientApplicationBuilder.Create(config.ClientId)
                                          .WithAuthority(new Uri(config.Authority))
                                          .WithClientClaims(certificate, claims)
                                          .Build();

De nuevo, para una información más detallada, consulte aserciones de cliente.

Pasos siguientes

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