Moderní ověřování je nyní ve výchozím nastavení povoleno pro všechny nové tenanty Microsoft 365/Azure, protože tento protokol je bezpečnější než zastaralé základní ověřování. Moderní ověřování je založeno na knihovně ověřování Active Directory a OAuth 2.0. Používá časově omezené tokeny a aplikace neukládají přihlašovací údaje uživatele. Kromě toho se plánuje úplný zákaz používání základního ověřování pro všechny klienty Microsoft 365. V tomto článku se zaměříme na použití Modern Authentication pro připojení přes EWS, SMTP, IMAP, POP klienty Aspose.Email pro .NET.

Předpoklad nastavení

Chcete-li použít moderní ověřování, ujistěte se, že je povoleno. U nájemců vytvořených před 1. srpnem 2017 je však moderní ověřování ve výchozím nastavení vypnuto. V Centru pro správu Microsoft 365 přejděte na Nastavení > Nastavení organizace > Moderní ověřování. V plovoucí nabídce Moderní ověřování, která se zobrazí, můžete identifikovat protokoly, které již nevyžadují základní ověřování. Pro nové tenanty Microsoft365 v Azure je základní ověřování ve výchozím nastavení pro všechny aplikace zakázáno. Proto se text zobrazí v této sekci.

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.

Podporu základního ověřování pro tenanta můžete povolit z portálu Azure, přejděte na Azure Active Directory > Vlastnosti > Spravovat výchozí nastavení zabezpečení > Povolit výchozí nastavení zabezpečení > Ne. Další informace naleznete v článek dokumentace společnosti Microsoft.

Registrace aplikace pomocí Azure Active Directory

Nejprve je nutné provést registraci aplikace pomocí Azure Active Directory. Existují dva typy oprávnění, která lze použít pro přístup k poštovním schránkám s vaší aplikací. Vyberte konkrétní typ oprávnění v závislosti na aplikaci, kterou vytváříte:

  • Aplikace, které používají delegovaná oprávnění, mají přihlášeného uživatele. Jinými slovy, když se připojíte ke službě, zobrazí se dialogové okno pro uživatelské jméno a heslo. Aplikace nikdy nemůže mít více oprávnění než přihlášený uživatel.
  • Aplikace, které používají oprávnění aplikace, běží bez přítomnosti přihlášeného uživatele. Jedná se například o aplikace, které běží jako služby na pozadí nebo jako démoni. Pouze administrátor může souhlasit s oprávněními aplikace.

Další informace naleznete v článek dokumentace společnosti Microsoft.

Postup registrace závisí na typu zvoleného oprávnění. Chcete-li aplikaci zaregistrovat, přečtěte si článek dokumentace společnosti Microsoft.

C# .NET API pro přístup k e-mailovým serverům

K vytvoření klientů EWS, Imap a Smtp použijeme Aspose.Email for .NET. Je to úžasná knihovna pro implementaci aplikací e-mailových klientů pomocí .NET. Pomocí knihovny se můžete snadno připojit k e-mailovým serverům a přistupovat k nim. Aspose.Email pro .NET můžete nainstalovat přes NuGet nebo stáhnout jeho DLL.

PM> Install-Package Aspose.Email

Používejte moderní ověřování pomocí EwsClient

Po registraci aplikace se můžeme soustředit na psaní kódu, který se bude skládat z následujících částí:

  • Nejprve získejte autorizační token.
  • Poté použijte token k ověření.

Získání autorizačního tokenu

K získání tokenu použijeme Microsoft Authentication Library (MSAL) pro .NET.

Níže jsou uvedeny kroky k získání autorizačního tokenu v C#.

  • Přidejte Microsoft.Identity.Client balíček nuget, který obsahuje binární soubory MSAL.NET.
  • Vytvořte třídu AccessParameters pro ukládání pověření.
  • Nakonec vytvořte metodu akceptující přístupové parametry a pomocí MSAL.NET získáte přístupový token.

Následující ukázky kódu budou záviset na typu zvoleného ověření.

Získejte token s delegovanou autorizací

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

Získejte token s ověřením aplikace

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

Použití tokenu k ověření

Poté, když jsme úspěšně získali token, pojďme inicializovat EwsClient.

Použití tokenu s delegovaným ověřením

NetworkCredential credentials = new OAuthNetworkCredential(accessToken);

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

Použití tokenu s ověřením aplikace

// Použijte uživatelské jméno a přístupový token Microsoft365
NetworkCredential credentials = new OAuthNetworkCredential(username, accessToken);

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

Používejte moderní ověřování s klienty IMAP, POP nebo SMTP

Přístup IMAP, POP, SMTP prostřednictvím oprávnění aplikace není podporován. Jinými slovy, delegovaná autentizace je podporována pouze.

Postup registrace aplikace pomocí Azure Active Directory je definován výše.

Pomocí centra pro správu Microsoft 365 povolte nebo zakažte IMAP, POP, SMTP AUTH u konkrétních poštovních schránek

  • Otevřete Centrum pro správu Microsoft 365 a přejděte na Uživatelé > Aktivní uživatelé.
  • Vyberte uživatele a v zobrazené nabídce klikněte na Pošta.
  • V části E-mailové aplikace klikněte na Spravovat e-mailové aplikace.
  • Ověřte nastavení IMAP, POP, Authenticated SMTP: nezaškrtnuto = zakázáno, zaškrtnuto = povoleno.
  • Nakonec klikněte na Uložit změny.

Přidání kódu pro získání ověřovacího tokenu ze serveru tokenů

Ujistěte se, že jste zadali úplné rozsahy, včetně adres URL prostředků aplikace Outlook.

K získání tokenu použijeme Microsoft Authentication Library (MSAL) pro .NET.

Níže jsou uvedeny kroky k získání autorizačního tokenu v C#.

  • Přidejte Microsoft.Identity.Client balíček nuget, který obsahuje binární soubory MSAL.NET.
  • Vytvořte třídu AccessParameters pro ukládání pověření.
  • Nakonec vytvořte metodu akceptující přístupové parametry a pomocí MSAL.NET získáte přístupový token.
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;
}

Použití tokenu k ověření

Poté, když jsme úspěšně získali token, inicializujme ImapClient.

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

Podobně bude inicializace SmtpClient vypadat následovně.

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

Získejte bezplatnou licenci API

Aspose.Email pro .NET můžete používat bez omezení hodnocení pomocí bezplatné dočasné licence.

Závěr

V tomto článku jste se naučili používat moderní ověřování pomocí Aspose.Email API pro připojení k poštovním schránkám Microsoft365. Kromě toho jste viděli, že můžete snadno vytvářet aplikace e-mailového klienta, které splňují pokročilé bezpečnostní požadavky. Více o Aspose.Email se můžete dozvědět pomocí dokumentace. V případě, že byste měli nějaké dotazy, můžete psát na naše fórum.

Viz také