Moderne Authentifizierung ist jetzt standardmäßig für alle neuen Microsoft 365/Azure-Mandanten aktiviert, da dieses Protokoll sicherer ist als die veraltete Standardauthentifizierung. Die moderne Authentifizierung basiert auf der Active Directory-Authentifizierungsbibliothek und OAuth 2.0. Es verwendet zeitlich begrenzte Token und Anwendungen speichern keine Benutzeranmeldeinformationen. Darüber hinaus ist geplant, die Verwendung der Basisauthentifizierung für alle Microsoft 365-Clients vollständig zu untersagen. In diesem Artikel konzentrieren wir uns auf die Verwendung der modernen Authentifizierung zum Herstellen einer Verbindung über EWS-, SMTP-, IMAP- und POP-Clients von Aspose.Email für .NET.

Erforderliche Einstellungen

Um die moderne Authentifizierung zu verwenden, stellen Sie sicher, dass sie aktiviert ist. Für Mandanten, die vor dem 1. August 2017 erstellt wurden, ist die moderne Authentifizierung jedoch standardmäßig deaktiviert. Gehen Sie im Microsoft 365 Admin Center zu Einstellungen > Organisationseinstellungen > Moderne Authentifizierung. Im angezeigten Flyout für die moderne Authentifizierung können Sie die Protokolle identifizieren, für die keine Standardauthentifizierung mehr erforderlich ist. Für neue Microsoft365-Mandanten in Azure ist die Standardauthentifizierung standardmäßig für alle Anwendungen deaktiviert. Daher wird der Text in diesem Abschnitt angezeigt.

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.

Sie können die Basis-Authentifizierungsunterstützung für Mandanten über das Azure-Portal aktivieren, gehen Sie zu Azure Active Directory > Eigenschaften > Sicherheitsstandards verwalten > Sicherheitsstandards aktivieren > „Nein“. Weitere Informationen finden Sie im Microsoft-Dokumentationsartikel.

App-Registrierung bei Azure Active Directory

Zunächst ist es notwendig, die App-Registrierung bei Azure Active Directory durchzuführen. Es gibt zwei Arten von Berechtigungen, die für den Zugriff auf Postfächer mit Ihrer App verwendet werden können. Wählen Sie abhängig von der App, die Sie erstellen, einen bestimmten Berechtigungstyp aus:

  • Bei Apps, die delegierte Berechtigungen verwenden, ist ein angemeldeter Benutzer vorhanden. Mit anderen Worten, wenn Sie sich mit dem Dienst verbinden, erscheint ein Dialogfenster für einen Benutzernamen und ein Passwort. Eine App kann nie mehr Rechte haben als ein angemeldeter Benutzer.
  • Apps, die Anwendungsberechtigungen verwenden, werden ausgeführt, ohne dass ein angemeldeter Benutzer anwesend ist. Dies sind beispielsweise Apps, die als Hintergrunddienste oder Daemons ausgeführt werden. Nur ein Administrator kann Anwendungsberechtigungen zustimmen.

Weitere Informationen finden Sie außerdem im Microsoft-Dokumentationsartikel.

Das Registrierungsverfahren hängt von der Art der ausgewählten Berechtigung ab. Informationen zum Registrieren Ihrer App finden Sie im Microsoft-Dokumentationsartikel.

C# .NET-API für den Zugriff auf E-Mail-Server

Um die EWS-, Imap- und SMTP-Clients zu erstellen, verwenden wir Aspose.Email for .NET. Es ist eine erstaunliche Bibliothek, um E-Mail-Client-Apps mit .NET zu implementieren. Mit der Bibliothek können Sie sich einfach mit den E-Mail-Servern verbinden und darauf zugreifen. Sie können Aspose.Email für .NET über NuGet installieren oder dessen DLL herunterladen.

PM> Install-Package Aspose.Email

Verwenden Sie die moderne Authentifizierung mit EwsClient

Nach der Registrierung der Anwendung können wir uns auf das Schreiben des Codes konzentrieren, der aus den folgenden Teilen besteht:

  • Rufen Sie zunächst das Autorisierungstoken ab.
  • Verwenden Sie dann das Token zur Authentifizierung.

Abrufen des Autorisierungstokens

Um das Token zu erhalten, verwenden wir Microsoft Authentication Library (MSAL) for .NET.

Im Folgenden finden Sie die Schritte zum Abrufen des Autorisierungstokens in C#.

  • Fügen Sie das Microsoft.Identity.Client Nuget-Paket hinzu, das die Binärdateien von MSAL.NET enthält.
  • Erstellen Sie eine AccessParameters-Klasse zum Speichern von Anmeldeinformationen.
  • Erstellen Sie schließlich eine Methode, die Zugriffsparameter akzeptiert und MSAL.NET verwendet, um ein Zugriffstoken abzurufen.

Die folgenden Codebeispiele hängen vom ausgewählten Authentifizierungstyp ab.

Holen Sie sich ein Token mit delegierter Authentifizierung

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

Holen Sie sich ein Token mit App-Authentifizierung

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

Verwenden des Tokens zur Authentifizierung

Wenn wir danach erfolgreich ein Token erhalten haben, initialisieren wir den EwsClient.

Verwenden des Tokens mit delegierter Authentifizierung

NetworkCredential credentials = new OAuthNetworkCredential(accessToken);

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

Verwenden des Tokens mit App-Authentifizierung

// Verwenden Sie den Microsoft365-Benutzernamen und das Zugriffstoken
NetworkCredential credentials = new OAuthNetworkCredential(username, accessToken);

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

Verwenden Sie die moderne Authentifizierung mit IMAP-, POP- oder SMTP-Clients

IMAP-, POP- und SMTP-Zugriff über Anwendungsberechtigungen wird nicht unterstützt. Mit anderen Worten, es wird nur die delegierte Authentifizierung unterstützt.

Das Verfahren zur App-Registrierung mit Azure Active Directory ist oben definiert.

Verwenden Sie das Microsoft 365 Admin Center, um IMAP, POP, SMTP AUTH für bestimmte Postfächer zu aktivieren oder zu deaktivieren

  • Öffnen Sie das Microsoft 365 Admin Center und gehen Sie zu Benutzer > Aktive Benutzer.
  • Wählen Sie den Benutzer aus und klicken Sie im angezeigten Flyout auf E-Mail.
  • Klicken Sie im Abschnitt E-Mail-Apps auf E-Mail-Apps verwalten.
  • Überprüfen Sie die Einstellungen für IMAP, POP, authentifiziertes SMTP: nicht markiert = deaktiviert, markiert = aktiviert.
  • Klicken Sie abschließend auf Änderungen speichern.

Hinzufügen von Code zum Abrufen eines Authentifizierungstokens von einem Tokenserver

Stellen Sie sicher, dass Sie die vollständigen Bereiche angeben, einschließlich Outlook-Ressourcen-URLs.

Um das Token zu erhalten, verwenden wir Microsoft Authentication Library (MSAL) for .NET.

Im Folgenden finden Sie die Schritte zum Abrufen des Autorisierungstokens in C#.

  • Fügen Sie das Microsoft.Identity.Client Nuget-Paket hinzu, das die Binärdateien von MSAL.NET enthält.
  • Erstellen Sie eine AccessParameters-Klasse zum Speichern von Anmeldeinformationen.
  • Erstellen Sie schließlich eine Methode, die Zugriffsparameter akzeptiert und MSAL.NET verwendet, um ein Zugriffstoken abzurufen.
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;
}

Verwenden des Tokens zur Authentifizierung

Wenn wir danach erfolgreich ein Token erhalten haben, initialisieren wir den ImapClient.

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

Ähnlich sieht die Initialisierung von SmtpClient wie folgt aus.

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

Holen Sie sich eine kostenlose API-Lizenz

Sie können Aspose.Email für .NET ohne Evaluierungseinschränkungen mit einer kostenlosen temporären Lizenz verwenden.

Fazit

In diesem Artikel haben Sie gelernt, wie Sie die moderne Authentifizierung mit der Aspose.Email-API verwenden, um eine Verbindung zu Microsoft365-Postfächern herzustellen. Außerdem haben Sie gesehen, dass Sie ganz einfach E-Mail-Client-Anwendungen erstellen können, die erweiterte Sicherheitsanforderungen erfüllen. Weitere Informationen zu Aspose.Email finden Sie in der Dokumentation. Falls Sie Fragen haben, können Sie in unserem Forum posten.

Siehe auch