Autenticazione moderna è ora abilitata per impostazione predefinita per tutti i nuovi tenant di Microsoft 365/Azure perché questo protocollo è più sicuro dell’autenticazione di base deprecata. L’autenticazione moderna si basa su Active Directory Authentication Library e OAuth 2.0. Utilizza token a tempo limitato e le applicazioni non memorizzano le credenziali dell’utente. Inoltre, si prevede di vietare completamente l’utilizzo dell’autenticazione di base per tutti i client Microsoft 365. In questo articolo, ci concentreremo sull’utilizzo dell’autenticazione moderna per la connessione tramite client EWS, SMTP, IMAP e POP di Aspose.Email per .NET.

Impostazioni dei prerequisiti

Per utilizzare l’autenticazione moderna, assicurati che sia abilitata. Tuttavia, per i tenant creati prima del 1° agosto 2017, l’autenticazione moderna è disattivata per impostazione predefinita. In Interfaccia di amministrazione di Microsoft 365, vai su Impostazioni > Impostazioni organizzazione > Autenticazione moderna. Nel riquadro a comparsa Autenticazione moderna visualizzato, puoi identificare i protocolli che non richiedono più l’autenticazione di base. Per i nuovi tenant Microsoft365 in Azure, l’autenticazione di base è disabilitata per impostazione predefinita per tutte le applicazioni. Pertanto, il testo verrà visualizzato in questa sezione.

Your organization has security defaults enabled, which means modern authentication to Exchange Online is required, and basic authentication connections are blocked.
You must turn off security defaults in the Azure portal before you can change any settings here.

È possibile abilitare il supporto dell’autenticazione di base per il tenant dal portale Azure, passare ad Azure Active Directory > Proprietà > Gestisci impostazioni predefinite di sicurezza > Abilita impostazioni predefinite di sicurezza > “No”. Per ulteriori informazioni, vedere l’Articolo della documentazione Microsoft.

Registrazione dell’app con Azure Active Directory

Innanzitutto, è necessario eseguire la registrazione dell’app con Azure Active Directory. Esistono due tipi di autorizzazioni che possono essere utilizzate per accedere alle cassette postali con la tua app. Scegli un tipo specifico di autorizzazione, a seconda dell’app che stai creando:

  • Nelle app che usano autorizzazioni delegate è presente un utente che ha eseguito l’accesso. In altre parole, quando ci si connette al servizio, viene visualizzata una finestra di dialogo per un nome utente e una password. L’app non può mai avere più privilegi di un utente che ha eseguito l’accesso.
  • Le app che usano le autorizzazioni dell’applicazione vengono eseguite senza la presenza di un utente che ha eseguito l’accesso. Ad esempio, si tratta di app che vengono eseguite come servizi in background o demoni. Solo un amministratore può acconsentire alle autorizzazioni dell’applicazione.

Inoltre, fare riferimento all’Articolo della documentazione Microsoft per ulteriori informazioni.

La procedura di registrazione dipende dal tipo di permesso selezionato. Per registrare la tua app, fai riferimento all’Articolo della documentazione Microsoft.

API C# .NET per accedere ai server di posta elettronica

Per creare i client EWS, Imap e Smtp, utilizzeremo Aspose.Email for .NET. È una straordinaria libreria per implementare app client di posta elettronica utilizzando .NET. Utilizzando la libreria, puoi facilmente connetterti e accedere ai server di posta elettronica. Puoi installare Aspose.Email per .NET tramite NuGet o scarica la sua DLL.

PM> Install-Package Aspose.Email

Usa l’autenticazione moderna con EwsClient

Dopo aver registrato l’applicazione, possiamo concentrarci sulla scrittura del codice, che sarà composto dalle seguenti parti:

  • Innanzitutto, ottieni il token di autorizzazione.
  • Quindi, usa il token per autenticarti.

Ottenere il token di autorizzazione

Per ottenere il token utilizzeremo Microsoft Authentication Library (MSAL) for .NET.

Di seguito sono riportati i passaggi per ottenere il token di autorizzazione in C#.

  • Aggiungere il pacchetto nuget Microsoft.Identity.Client che contiene i file binari di MSAL.NET.
  • Crea una classe AccessParameters per archiviare le credenziali.
  • Infine, crea un metodo che accetti i parametri di accesso e utilizzi MSAL.NET per ottenere un token di accesso.

I seguenti esempi di codice dipenderanno dal tipo di autenticazione scelto.

Ottieni un token con autenticazione delegata

public class AccessParameters
{
    public string TenantId { get; set; }
    public string ClientId { get; set; }
    public string RedirectUri { get; set; } = "http://localhost";
    public string[] Scopes { get; set; } = { "https://outlook.office365.com/EWS.AccessAsUser.All" };
}

public static async Task<string> GetAccessToken(AccessParameters accessParameters)
{
    var pca = PublicClientApplicationBuilder
                            .Create(accessParameters.ClientId)
                            .WithTenantId(accessParameters.TenantId)
                            .WithRedirectUri(ccessParameters.RedirectUri)
                            .Build();

    var result = await pca.AcquireTokenInteractive(accessParameters.Scopes)
        .WithUseEmbeddedWebView(false)
        .ExecuteAsync();

    return result.AccessToken;
}

Ottieni un token con l’autenticazione dell’app

public class AccessParameters
{
    public string TenantId { get; set; }
    public string ClientId { get; set; }
    public string ClientSecret { get; set; }
    public string[] Scopes { get; set; } = { "https://outlook.office365.com/.default" };
}

public static async Task<string> GetAccessToken(AccessParameters accessParameters)
{
    var cca = ConfidentialClientApplicationBuilder
        .Create(accessParameters.ClientId)
        .WithClientSecret(accessParameters.ClientSecret)
        .WithTenantId(accessParameters.TenantId)
        .Build();

    var result = await cca.AcquireTokenForClient(accessParameters.Scopes).ExecuteAsync();

    return result.AccessToken;
}

Utilizzo del token per l’autenticazione

Dopodiché, quando abbiamo ottenuto con successo un token, inizializziamo EwsClient.

Utilizzo del token con autenticazione delegata

NetworkCredential credentials = new OAuthNetworkCredential(accessToken);

using var client = EWSClient.GetEWSClient("https://outlook.office365.com/EWS/Exchange.asmx", credentials);

Utilizzo del token con app auth

// Usa il nome utente e il token di accesso Microsoft365
NetworkCredential credentials = new OAuthNetworkCredential(username, accessToken);

using var client = EWSClient.GetEWSClient("https://outlook.office365.com/EWS/Exchange.asmx", credentials);

Usa l’autenticazione moderna con client IMAP, POP o SMTP

L’accesso IMAP, POP, SMTP tramite le autorizzazioni dell’applicazione non è supportato. In altre parole, è supportata solo l’autenticazione delegata.

La procedura di registrazione dell’app con Azure Active Directory è definita sopra.

Utilizzare l’interfaccia di amministrazione di Microsoft 365 per abilitare o disabilitare IMAP, POP, SMTP AUTH su cassette postali specifiche

  • Apri l’Interfaccia di amministrazione di Microsoft 365 e vai su Utenti > Utenti attivi.
  • Seleziona l’utente e, nel riquadro a comparsa visualizzato, fai clic su Posta.
  • Nella sezione App di posta elettronica, fai clic su Gestisci app di posta elettronica.
  • Verifica l’impostazione IMAP, POP, SMTP autenticato: deselezionata = disabilitata, selezionata = abilitata.
  • Infine, fai clic su Salva modifiche.

Aggiunta di codice per ottenere un token di autenticazione da un token server

Assicurati di specificare gli ambiti completi, inclusi gli URL delle risorse di Outlook.

Per ottenere il token utilizzeremo Microsoft Authentication Library (MSAL) for .NET.

Di seguito sono riportati i passaggi per ottenere il token di autorizzazione in C#.

  • Aggiungere il pacchetto nuget Microsoft.Identity.Client che contiene i file binari di MSAL.NET.
  • Crea una classe AccessParameters per archiviare le credenziali.
  • Infine, crea un metodo che accetti i parametri di accesso e utilizzi MSAL.NET per ottenere un token di accesso.
public class AccessParameters
{
    public string TenantId { get; set; }
    public string ClientId { get; set; }
    public string RedirectUri { get; set; } = "http://localhost";
    public string[] Scopes { get; set; } = { 
        "https://outlook.office.com/IMAP.AccessAsUser.All", 
        "https://outlook.office.com/SMTP.Send" };
}

public static async Task<string> GetAccessToken(AccessParameters accessParameters)
{
    var pca = PublicClientApplicationBuilder
                            .Create(accessParameters.ClientId)
                            .WithTenantId(accessParameters.TenantId)
                            .WithRedirectUri(ccessParameters.RedirectUri)
                            .Build();

    var result = await pca.AcquireTokenInteractive(accessParameters.Scopes)
        .WithUseEmbeddedWebView(false)
        .ExecuteAsync();

    return result.AccessToken;
}

Utilizzo del token per l’autenticazione

Dopodiché, quando abbiamo ottenuto con successo un token, inizializziamo ImapClient.

var imapClient = new ImapClient(
    "outlook.office365.com", 
    993, 
    username, 
    accessToken, 
    true);

Allo stesso modo, l’inizializzazione di SmtpClient apparirà come segue.

var smtpClient = new SmtpClient(
    "smtp.office365.com",
    587, 
    username,
    accessToken, 
    true);

Ottieni una licenza API gratuita

È possibile utilizzare Aspose.Email per .NET senza limitazioni di valutazione utilizzando una licenza temporanea gratuita.

Conclusione

In questo articolo hai imparato come utilizzare l’autenticazione moderna con l’API Aspose.Email per connetterti alle cassette postali di Microsoft365. Inoltre, hai visto che puoi creare facilmente applicazioni client di posta elettronica che soddisfano requisiti di sicurezza avanzati. Puoi saperne di più su Aspose.Email usando la documentazione. In caso aveste domande, potete postare sul nostro forum.

Guarda anche