Modern Authentication är nu aktiverat som standard för alla nya Microsoft 365/Azure-hyresgäster eftersom detta protokoll är säkrare än den föråldrade grundläggande autentiseringen. Modern autentisering är baserad på Active Directory Authentication Library och OAuth 2.0. Den använder tidsbegränsade tokens och applikationer lagrar inte användaruppgifter. Dessutom är det planerat att helt förbjuda användningen av grundläggande autentisering för alla Microsoft 365-klienter. I den här artikeln kommer vi att fokusera på att använda modern autentisering för att ansluta via EWS, SMTP, IMAP, POP-klienter av Aspose.Email för .NET.

Förutsättningsinställningar

För att använda modern autentisering, se till att den är aktiverad. Men för hyresgäster som skapats före 1 augusti 2017 är modern autentisering avstängd som standard. I Microsoft 365 admin center, gå till Inställningar > Organisationsinställningar > Modern autentisering. I den utfällbara rutan Modern autentisering som visas kan du identifiera de protokoll som inte längre kräver grundläggande autentisering. För nya Microsoft365-hyresgäster i Azure är grundläggande autentisering inaktiverad som standard för alla applikationer. Därför kommer texten att visas i det här avsnittet.

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.

Du kan aktivera Basic Auth-stöd för klienten från Azure-portalen, gå till Azure Active Directory > Egenskaper > Hantera säkerhetsstandarder > Aktivera säkerhetsstandarder > Nej. För mer information, se Microsoft Documentation Article.

Appregistrering med Azure Active Directory

För det första är det nödvändigt att utföra appregistrering med Azure Active Directory. Det finns två typer av behörigheter som kan användas för att komma åt brevlådor med din app. Välj en specifik typ av behörighet, beroende på vilken app du skapar:

  • Appar som använder delegerade behörigheter har en inloggad användare närvarande. Med andra ord, när du ansluter till tjänsten visas ett dialogfönster för ett användarnamn och ett lösenord. Appen kan aldrig ha fler privilegier än en inloggad användare.
  • Appar som använder applikationsbehörigheter körs utan att en inloggad användare är närvarande. Till exempel är dessa appar som körs som bakgrundstjänster eller demoner. Endast en administratör kan samtycka till applikationsbehörigheter.

Se även Microsoft Documentation Article för mer information.

Registreringsproceduren beror på vilken typ av behörighet som valts. För att registrera din app, se Microsoft Documentation Article.

C# .NET API för åtkomst till e-postservrar

För att skapa EWS, Imap och Smtp-klienter kommer vi att använda Aspose.Email for .NET. Det är ett fantastiskt bibliotek för att implementera e-postklientappar med .NET. Med hjälp av biblioteket kan du enkelt ansluta till och komma åt e-postservrarna. Du kan installera Aspose.Email för .NET via NuGet eller ladda ner dess DLL.

PM> Install-Package Aspose.Email

Använd modern autentisering med EwsClient

Efter registrering av ansökan kan vi fokusera på att skriva koden, som kommer att bestå av följande delar:

  • Först skaffa auktoriseringstoken.
  • Använd sedan token för att autentisera.

Hämtar auktoriseringstoken

För att få token använder vi Microsoft Authentication Library (MSAL) för .NET.

Följande är stegen för att få auktoriseringstoken i C#.

  • Lägg till Microsoft.Identity.Client nuget-paketet som innehåller binärfilerna för MSAL.NET.
  • Skapa en AccessParameters-klass för att lagra autentiseringsuppgifter.
  • Slutligen, skapa en metod som accepterar åtkomstparametrar och använder MSAL.NET för att få en åtkomsttoken.

Följande kodexempel beror på vilken typ av autentisering som väljs.

Få en token med delegerad autentisering

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

Få en token med appauth

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

Använda token för att autentisera

Efter det, när vi framgångsrikt har erhållit en token, låt oss initiera EwsClient.

Använda token med delegerad autentisering

NetworkCredential credentials = new OAuthNetworkCredential(accessToken);

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

Använda token med appauth

// Använd Microsoft365 användarnamn och åtkomsttoken
NetworkCredential credentials = new OAuthNetworkCredential(username, accessToken);

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

Använd modern autentisering med IMAP-, POP- eller SMTP-klienter

IMAP, POP, SMTP-åtkomst via applikationsbehörigheter stöds inte. Med andra ord stöds endast delegerad autentisering.

Proceduren för appregistrering med Azure Active Directory definieras ovan.

Använd Microsoft 365 admin center för att aktivera eller inaktivera IMAP, POP, SMTP AUTH på specifika postlådor

  • Öppna Microsoft 365 admin center och gå till Användare > Aktiva användare.
  • Välj användaren och klicka på Mail i den utfällbara rutan som visas.
  • I avsnittet E-postappar klickar du på Hantera e-postappar.
  • Verifiera IMAP, POP, Authenticated SMTP-inställningen: omarkerad = inaktiverad, markerad = aktiverad.
  • Klicka slutligen på Spara ändringar.

Lägger till kod för att få en autentiseringstoken från en tokenserver

Se till att ange de fullständiga omfattningarna, inklusive URL:er för Outlook-resurs.

För att få token använder vi Microsoft Authentication Library (MSAL) för .NET.

Följande är stegen för att få auktoriseringstoken i C#.

  • Lägg till Microsoft.Identity.Client nuget-paketet som innehåller binärfilerna för MSAL.NET.
  • Skapa en AccessParameters-klass för att lagra autentiseringsuppgifter.
  • Slutligen, skapa en metod som accepterar åtkomstparametrar och använder MSAL.NET för att få en åtkomsttoken.
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;
}

Använda token för att autentisera

Efter det, när vi framgångsrikt har erhållit en token, låt oss initiera ImapClient.

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

På liknande sätt kommer SmtpClient-initieringen att se ut som följande.

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

Skaffa en gratis API-licens

Du kan använda Aspose.Email för .NET utan utvärderingsbegränsningar med en gratis temporär licens.

Slutsats

I den här artikeln har du lärt dig hur du använder modern autentisering med Aspose.Email API för att ansluta till Microsoft365-postlådor. Dessutom har du sett att du enkelt kan skapa e-postklientapplikationer som uppfyller avancerade säkerhetskrav. Du kan lära dig mer om Aspose.Email med hjälp av dokumentationen. Om du skulle ha några frågor kan du göra ett inlägg på vårt forum.

Se även