Compartir a través de


Tutorial: llamada a una API web protegida desde la aplicación de demonio de .NET

Se aplica a:Círculo verde con un símbolo de marca de verificación blanca. inquilinos de personal Círculo verde con un símbolo de marca de verificación blanca. inquilinos externos (más información)

En este tutorial, se muestra cómo llamar a una API web protegida desde una aplicación de demonio de .NET. Permita que la aplicación de demonio de cliente adquiera un token de acceso con su propia identidad y, luego, llame a la API web. En nuestro caso, llamamos a un punto de conexión protegido de Microsoft Graph.

En este tutorial,

  • Configure una aplicación de demonio para usarla en los detalles del registro de la aplicación. Asegúrese de conceder a la aplicación el permiso User.Read.All en Microsoft Graph API.
  • Compile una aplicación de demonio que adquiera un token en su propio nombre y llame a una API web protegida.

Prerrequisitos

  • .NET En este tutorial, se usa .NET 9.0.
  • Visual Studio Code u otro editor de código.
  • Un registro de aplicación en el inquilino. Asegúrese de que tiene lo siguiente en los detalles del registro de la aplicación:
    • El ID de aplicación del cliente de la aplicación web que ha registrado.
    • El id. de Directory (inquilino) donde registró la aplicación web.
    • El valorsecreto del clientepara la aplicación web que ha creado.

Creación de aplicaciones de demonio de .NET

  1. Abra el terminal y vaya a la carpeta donde desea tener el proyecto.

  2. Inicialice una aplicación de consola de .NET y vaya a su carpeta raíz.

    dotnet new console -n DotnetDaemon
    cd DotnetDaemon
    

Instalación de paquetes

Instale los paquetes Microsoft.Identity.Web y Microsoft.Identity.Web.DownstreamApi:

dotnet add package Microsoft.Identity.Web
dotnet add package Microsoft.Identity.Web.DownstreamApi

Microsoft.Identity.Web proporciona el pegamento entre ASP.NET Core, el middleware de autenticación y la Biblioteca de autenticación de Microsoft (MSAL) para .NET, lo que facilita la adición de funcionalidades de autenticación y autorización a la aplicación. Microsoft.Identity.Web.DownstreamApi proporciona una interfaz que se usa para llamar a una API descendente.

Crear appsettings.json archivo para agregar configuraciones de registro

  1. Cree un archivo appsettings.json en la carpeta raíz de la aplicación.

  2. Agregue los detalles del registro de aplicación al archivo appsettings.json.

    {
        "AzureAd": {
            // "Authority": "", you can use this for customer tenants in place of Instance and TenantId values
            "Instance": "https://login.microsoftonline.com/",
            "TenantId": "Enter_the_Tenant_ID_Here",
            "ClientId": "Enter_the_Application_ID_Here",
            "ClientCredentials": [
                {
                    "SourceType": "ClientSecret",
                    "ClientSecret": "Enter_the_Client_Secret_Here"
                }
            ]
        },
        "DownstreamApi": {
            "BaseUrl": "https://graph.microsoft.com",
            "RelativePath": "/v1.0/users/",
            "RequestAppToken": true,
            "Scopes": [
                "https://graph.microsoft.com/.default"
            ]
        }
    }
    

    Reemplace los valores siguientes por los que considere adecuados:

    Valor Descripción
    Enter_the_Application_ID_Here La aplicación (cliente) de la aplicación de demonio de cliente que registró.
    Enter_the_Client_Secret_Here Valor del secreto de la aplicación de demonio que ha creado.
    Enter_the_Tenant_ID_Here Id. de inquilino del directorio o inquilino donde se registra la aplicación.

    Nota:

    En el caso de las aplicaciones registradas en un inquilino externo, puede usar Authority y quitar Instance y TenantId.

    "Authority": "https://<Enter_the_Tenant_Subdomain_Here>.ciamlogin.com/". Donde Enter_the_Tenant_Subdomain_Here es el subdominio del inquilino.

  3. Agregue el archivo appsettings.json al archivo del proyecto. El archivo de proyecto es un .csproj en tu proyecto. Esto se debe a que el archivo debe copiarse en el directorio de salida.

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

Adquirir token de acceso

  1. Abra el archivo program.cs en el editor de código y elimine su contenido.

  2. Agregue los paquetes al archivo.

    using Microsoft.Extensions.DependencyInjection;
    using Microsoft.Identity.Abstractions;
    using Microsoft.Identity.Web;
    
  3. Cree la instancia de adquisición de tokens. Use el método GetDefaultInstance de la clase TokenAcquirerFactory del paquete Microsoft.Identity.Web para compilar la instancia de adquisición de tokens. De forma predeterminada, la instancia lee un archivo appsettings.json si existe en la misma carpeta que la aplicación. GetDefaultInstance también nos permite agregar servicios a la colección de servicios.

    Agregue esta línea de código al archivo program.cs :

    var tokenAcquirerFactory = TokenAcquirerFactory.GetDefaultInstance();
    
  4. Configure las opciones de aplicación que se van a leer de la configuración y agregue el DownstreamApi servicio. El DownstreamApi servicio proporciona una interfaz que se usa para llamar a una API descendente. Llamamos a este servicio DownstreamAPI en el objeto config. La aplicación de demonio lee las configuraciones de API de bajada de la sección DownstreamApi de appsettings.json. De forma predeterminada, obtendrá una caché de tokens en memoria.

    Agregue el siguiente fragmento de código al archivo program.cs :

    const string ServiceName = "DownstreamApi";
    
    tokenAcquirerFactory.Services.AddDownstreamApi(ServiceName,
        tokenAcquirerFactory.Configuration.GetSection("DownstreamApi"));
    

    La API de bajada a la que llama es Microsoft Graph. En este tutorial, usamos el DownstreamApi servicio . También puede usar el SDK de Microsoft Graph.

  5. Compile el adquiridor de tokens. Esto compone todos los servicios que agrega y devuelve un proveedor de servicios. Use este proveedor de servicios para obtener acceso al recurso de API que agregue. En este caso, solo agregará un recurso de API como un servicio de nivel inferior al que desea acceder.

    Agregue el siguiente fragmento de código al archivo program.cs :

    var serviceProvider = tokenAcquirerFactory.Build();
    

Llamada a la API web

  1. Agregue código para llamar a la API web protegida mediante la IDownstreamApi interfaz . En este tutorial, llamamos a un endpoint de Microsoft Graph API.

  2. Agregue este código al archivo program.cs :

    try
    {
        IDownstreamApi downstreamApi = serviceProvider.GetRequiredService<IDownstreamApi>();
    
        var response = await downstreamApi.GetForAppAsync<HttpResponseMessage>("DownstreamApi");
        var content = await response.Content.ReadAsStringAsync();
        var statusCode = response.StatusCode;
    
        Console.WriteLine($"Response status code: {statusCode}");
    
        if (!content.Any())
        {
            Console.WriteLine("There are no users to display.");
            return;
        }
    
        Console.WriteLine(content);
    }
    catch (Exception ex) { Console.WriteLine("We could not retrieve the user's list: " + $"{ex}"); }
    

    El código llama al punto de conexión que definió en el archivo appsettings.json . El GetForAppAsync método de la IDownstreamApi interfaz se usa para llamar al punto de conexión. La aplicación realiza una llamada en su propio nombre. El método devuelve un HttpResponseMessage objeto . A continuación, la respuesta se lee como una cadena y se muestra en la consola.

Ejecución de la aplicación de demonio del cliente

Navegue a la carpeta raíz de la aplicación de demonio y ejecute el siguiente comando:

dotnet run

Si todo está bien, debería ver código de estado de respuesta: Ok en el terminal. Si hay usuarios, los usuarios aparecen en el terminal; de lo contrario, verá el mensaje No hay usuarios que mostrar.

Si se producen errores, verá un mensaje de error en el terminal.

Solución de problemas

En caso de que se produzcan errores,

  • Confirme los detalles de registro que agregó al archivo appsettings.json .
  • Confirme que ha agregado el archivo appsettings.json al archivo del proyecto.
  • Confirme que los permisos de la aplicación están configurados correctamente.