Condividi tramite


Come configurare le app daemon che chiamano le API Web

Informazioni su come configurare il codice per l'applicazione daemon che chiama le API Web.

Librerie Microsoft che supportano le app daemon

Le librerie Microsoft seguenti supportano app daemon:

Linguaggio/framework Progetto in
GitHub
Pacchetto Recupero
avviata
Consentire l'accesso degli utenti Accedere alle API Web Disponibile a livello generale (GA) o
Anteprima pubblica1
.NET MSAL.NET Microsoft.Identity.Client Guida introduttiva La libreria non può richiedere token ID per l'accesso utente. La libreria può richiedere token di accesso per le API Web protette. Disponibilità generale
Java MSAL4J msal4j La libreria non può richiedere token ID per l'accesso utente. La libreria può richiedere token di accesso per le API Web protette. Disponibilità generale
Nodo MSAL Node msal-node Guida introduttiva La libreria non può richiedere token ID per l'accesso utente. La libreria può richiedere token di accesso per le API Web protette. Disponibilità generale
Python MSAL Python msal-python Guida introduttiva La libreria non può richiedere token ID per l'accesso utente. La libreria può richiedere token di accesso per le API Web protette. Disponibilità generale

1 Le condizioni di licenza universali per i servizi online si applicano alle librerie in anteprima pubblica.

Configurare l'autorità

Le applicazioni daemon usano autorizzazioni dell'applicazione anziché autorizzazioni delegate. Quindi il tipo di account supportato non può essere un account in alcuna directory organizzativa o in qualsiasi account Microsoft personale (ad esempio, Skype, Xbox, Outlook.com). Non è previsto alcun amministratore tenant per concedere il consenso a un'applicazione daemon per un account personale Microsoft. È necessario scegliere gli account nella propria organizzazione o gli account in qualsiasi organizzazione.

L'autorità specificata nella configurazione dell'applicazione deve essere con tenant (è necessario specificare un ID tenant o un nome di dominio associato all'organizzazione).

Anche se si vuole fornire uno strumento multi-tenant, è consigliabile usare un ID tenant o un nome di dominio e non common o organizations con questo flusso, perché il servizio non può dedurre in modo affidabile quale tenant deve essere usato.

Configurare e creare un'istanza dell'applicazione

Nelle librerie MSAL le credenziali client (segreto o certificato) vengono passate come parametro della costruzione di applicazioni client riservate.

Importante

Anche se l'applicazione è un'applicazione console che viene eseguita come servizio, deve essere un’applicazione client riservata se si tratta di un'applicazione daemon.

File di configurazione

Il file di configurazione definisce:

  • L'istanza cloud e l'ID tenant, che insieme costituiscono l'autorità.
  • L’ID client ottenuto dalla registrazione dell'applicazione.
  • Un segreto client o un certificato.

Ecco un esempio di definizione della configurazione in un file appsettings.json. Questo esempio è tratto dall'esempio di codice del daemon della console .NET in 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]"
            }
        ]
    }
}

Specificare un certificato anziché il segreto client, o le credenziali di federazione dell'identità del carico di lavoro.

Creare un'istanza dell'applicazione MSAL

Per creare un'istanza dell'applicazione MSAL, aggiungere, fare riferimento o importare il pacchetto MSAL (a seconda della lingua).

La costruzione è diversa, a seconda che si usino segreti client o certificati (o asserzioni firmate in uno scenario avanzato).

Fare riferimento al pacchetto

Fare riferimento al pacchetto MSAL nel codice dell'applicazione.

Aggiungere il pacchetto NuGet Microsoft.Identity.Web.TokenAcquisition all'applicazione. In alternativa, se si vuole chiamare Microsoft Graph, aggiungere il pacchetto Microsoft.Identity.Web.GraphServiceClient. Il progetto potrebbe essere il seguente. Il file appsettings.json deve essere copiato nella directory di output.

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

Nel file Program.cs aggiungere una direttiva using nel codice per fare riferimento a Microsoft.Identity.Web.

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

Creare un'istanza dell'applicazione client riservata con un segreto client

Ecco il codice per creare un'istanza dell'applicazione client riservata con un segreto client:

   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 configurazione viene letta da appsettings.json:

Creare un'istanza dell'applicazione client riservata con un certificato client

Ecco il codice per compilare un'applicazione con un certificato:

Il codice stesso è esattamente lo stesso. Il certificato è descritto nella configurazione. Esistono molti modi per ottenere il certificato. Per informazioni dettagliate, vedere https://aka.ms/ms-id-web-certificates. Ecco come ottenere il certificato da KeyVault. L’identità di Microsoft delega DefaultAzureCredential dell'identità di Azure e usa l'identità gestita, se disponibile, per accedere al certificato da KeyVault. È possibile eseguire il debug dell'applicazione in locale, perché usa le credenziali per sviluppatore.

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

Scenario avanzato: Creare un'istanza dell'applicazione client riservata con asserzioni client

Oltre a usare un segreto client o un certificato, le applicazioni client riservate possono dimostrare la loro identità anche con le asserzioni client. Per informazioni dettagliate, vedere CredentialDescription.

Passaggi successivi

Passare all'articolo successivo in questo scenario, Acquisire un token per l'app.