Nowoczesne uwierzytelnianie jest teraz domyślnie włączone dla wszystkich nowych dzierżawców Microsoft 365/Azure, ponieważ ten protokół jest bezpieczniejszy niż przestarzałe uwierzytelnianie podstawowe. Nowoczesne uwierzytelnianie jest oparte na bibliotece uwierzytelniania Active Directory i OAuth 2.0. Używa ograniczonych czasowo tokenów, a aplikacje nie przechowują poświadczeń użytkownika. Ponadto planowany jest całkowity zakaz korzystania z Uwierzytelniania podstawowego dla wszystkich klientów Microsoft 365. W tym artykule skupimy się na używaniu nowoczesnego uwierzytelniania do łączenia się za pośrednictwem klientów EWS, SMTP, IMAP, POP Aspose.Email for .NET.

Ustawienia wymagań wstępnych

Aby korzystać z nowoczesnego uwierzytelniania, upewnij się, że jest ono włączone. Jednak w przypadku dzierżaw utworzonych przed 1 sierpnia 2017 nowoczesne uwierzytelnianie jest domyślnie wyłączone. W centrum administracyjnym Microsoft 365 przejdź do Ustawienia > Ustawienia organizacji > Nowoczesne uwierzytelnianie. W wysuwanym menu Nowoczesne uwierzytelnianie, które się pojawi, możesz zidentyfikować protokoły, które nie wymagają już uwierzytelniania podstawowego. W przypadku nowych dzierżawców Microsoft365 na platformie Azure uwierzytelnianie podstawowe jest domyślnie wyłączone dla wszystkich aplikacji. Dlatego tekst zostanie wyświetlony w tej sekcji.

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.

Możesz włączyć obsługę uwierzytelniania podstawowego dla dzierżawy z portalu Azure, przejdź do Azure Active Directory > Właściwości > Zarządzaj ustawieniami domyślnymi zabezpieczeń > Włącz ustawienia domyślne zabezpieczeń > Nie. Aby uzyskać więcej informacji, zobacz artykuł w dokumentacji firmy Microsoft.

Rejestracja aplikacji w usłudze Azure Active Directory

W pierwszej kolejności konieczne jest dokonanie rejestracji aplikacji w usłudze Azure Active Directory. Istnieją dwa rodzaje uprawnień, których można użyć, aby uzyskać dostęp do skrzynek pocztowych za pomocą aplikacji. Wybierz określony typ uprawnień, w zależności od tworzonej aplikacji:

  • Aplikacje korzystające z delegowanych uprawnień mają zalogowanego użytkownika. Innymi słowy, podczas łączenia się z usługą pojawia się okno dialogowe z nazwą użytkownika i hasłem. Aplikacja nigdy nie może mieć więcej uprawnień niż zalogowany użytkownik.
  • Aplikacje korzystające z uprawnień aplikacji działają bez obecności zalogowanego użytkownika. Są to na przykład aplikacje działające w tle jako usługi lub demony. Tylko administrator może wyrazić zgodę na uprawnienia aplikacji.

Ponadto zapoznaj się z artykułem w dokumentacji firmy Microsoft, aby uzyskać więcej informacji.

Procedura rejestracji zależy od rodzaju wybranego uprawnienia. Aby zarejestrować swoją aplikację, zapoznaj się z artykułem w dokumentacji firmy Microsoft.

Interfejs API C# .NET umożliwiający dostęp do serwerów poczty e-mail

Do stworzenia klientów EWS, Imap i Smtp użyjemy Aspose.Email for .NET. To niesamowita biblioteka do implementacji aplikacji klienta poczty e-mail przy użyciu platformy .NET. Korzystając z biblioteki, możesz łatwo łączyć się i uzyskiwać dostęp do serwerów poczty e-mail. Możesz zainstalować Aspose.Email for .NET przez NuGet lub pobierz jego bibliotekę DLL.

PM> Install-Package Aspose.Email

Korzystaj z nowoczesnego uwierzytelniania z EwsClient

Po zarejestrowaniu aplikacji możemy skupić się na napisaniu kodu, który składać się będzie z następujących części:

  • Najpierw zdobądź token autoryzacji.
  • Następnie użyj tokena do uwierzytelnienia.

Pobieranie tokena autoryzacji

Aby uzyskać token, użyjemy Microsoft Authentication Library (MSAL) for .NET.

Poniżej przedstawiono kroki, aby uzyskać token autoryzacji w języku C#.

  • Dodaj pakiet Microsoft.Identity.Client nuget zawierający pliki binarne MSAL.NET.
  • Utwórz klasę AccessParameters do przechowywania poświadczeń.
  • Na koniec utwórz metodę akceptującą parametry dostępu i używającą MSAL.NET, aby uzyskać token dostępu.

Poniższe przykłady kodu będą zależeć od wybranego typu uwierzytelniania.

Uzyskaj token z uwierzytelnianiem delegowanym

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

Zdobądź token z autoryzacją aplikacji

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

Używanie tokena do uwierzytelniania

Następnie, gdy pomyślnie uzyskaliśmy token, zainicjujmy EwsClient.

Używanie tokenu z uwierzytelnianiem delegowanym

NetworkCredential credentials = new OAuthNetworkCredential(accessToken);

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

Używanie tokena z uwierzytelnianiem aplikacji

// Użyj nazwy użytkownika Microsoft365 i tokenu dostępu
NetworkCredential credentials = new OAuthNetworkCredential(username, accessToken);

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

Używaj nowoczesnego uwierzytelniania z klientami IMAP, POP lub SMTP

Dostęp IMAP, POP, SMTP za pośrednictwem uprawnień aplikacji nie jest obsługiwany. Innymi słowy, obsługiwane jest tylko uwierzytelnianie delegowane.

Procedura rejestracji aplikacji w Azure Active Directory jest zdefiniowana powyżej.

Skorzystaj z centrum administracyjnego Microsoft 365, aby włączyć lub wyłączyć IMAP, POP, SMTP AUTH w określonych skrzynkach pocztowych

  • Otwórz centrum administracyjne Microsoft 365 i przejdź do Użytkownicy > Aktywni użytkownicy.
  • Wybierz użytkownika iw wyświetlonym menu wysuwanym kliknij Poczta.
  • W sekcji Aplikacje e-mail kliknij Zarządzaj aplikacjami e-mail.
  • Sprawdź ustawienia IMAP, POP, uwierzytelnionego SMTP: niezaznaczone = wyłączone, zaznaczone = włączone.
  • Na koniec kliknij Zapisz zmiany.

Dodanie kodu w celu uzyskania tokenu uwierzytelniającego z serwera tokenów

Pamiętaj, aby określić pełne zakresy, w tym adresy URL zasobów programu Outlook.

Aby uzyskać token, użyjemy Microsoft Authentication Library (MSAL) for .NET.

Poniżej przedstawiono kroki, aby uzyskać token autoryzacji w języku C#.

  • Dodaj pakiet Microsoft.Identity.Client nuget zawierający pliki binarne MSAL.NET.
  • Utwórz klasę AccessParameters do przechowywania poświadczeń.
  • Na koniec utwórz metodę akceptującą parametry dostępu i używającą MSAL.NET, aby uzyskać token dostępu.
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;
}

Używanie tokena do uwierzytelniania

Następnie, gdy pomyślnie uzyskaliśmy token, zainicjujmy ImapClient.

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

Podobnie inicjalizacja SmtpClient będzie wyglądać następująco.

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

Uzyskaj bezpłatną licencję API

Możesz używać Aspose.Email for .NET bez ograniczeń ewaluacyjnych, korzystając z darmowej licencji tymczasowej.

Wniosek

W tym artykule nauczyłeś się, jak używać nowoczesnego uwierzytelniania z Aspose.Email API do łączenia się ze skrzynkami pocztowymi Microsoft365. Ponadto przekonałeś się, że możesz łatwo tworzyć aplikacje klienckie poczty e-mail, które spełniają zaawansowane wymagania bezpieczeństwa. Możesz dowiedzieć się więcej o Aspose.Email korzystając z dokumentacji. Jeśli masz jakieś pytania, możesz pisać na naszym forum.

Zobacz też