Сучасну автентифікацію тепер увімкнено за замовчуванням для всіх нових клієнтів Microsoft 365/Azure, оскільки цей протокол безпечніший, ніж застаріла базова автентифікація. Сучасна автентифікація базується на бібліотеці автентифікації Active Directory і OAuth 2.0. Він використовує маркери з обмеженим часом, а програми не зберігають облікові дані користувача. Крім того, планується повністю заборонити використання базової автентифікації для всіх клієнтів Microsoft 365. У цій статті ми зосередимося на використанні сучасної автентифікації для підключення через EWS, SMTP, IMAP, POP-клієнти Aspose.Email for .NET.

Попередні налаштування

Щоб використовувати сучасну автентифікацію, переконайтеся, що її ввімкнено. Однак для орендарів, створених до 1 серпня 2017 року, сучасна автентифікація вимкнена за замовчуванням. У Центрі адміністрування Microsoft 365 перейдіть у Налаштування > Налаштування організації > Сучасна автентифікація. У спливаючому меню Сучасна автентифікація, що з’явиться, можна визначити протоколи, для яких більше не потрібна базова автентифікація. Для нових клієнтів Microsoft365 в Azure базову автентифікацію вимкнено за замовчуванням для всіх програм. Тому текст буде відображатися в цьому розділі.

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.

Ви можете ввімкнути підтримку базової автентифікації для клієнта на порталі Azure, перейдіть до Azure Active Directory > Властивості > Керувати параметрами безпеки за замовчуванням > Увімкнути параметри безпеки за замовчуванням > «Ні». Щоб отримати додаткові відомості, перегляньте статтю Microsoft Documentation.

Реєстрація програми в Azure Active Directory

По-перше, необхідно виконати реєстрацію програми в Azure Active Directory. Є два типи дозволів, які можна використовувати для доступу до поштових скриньок за допомогою програми. Виберіть певний тип дозволу залежно від програми, яку ви створюєте:

  • У програмах, які використовують делеговані дозволи, присутній користувач, який увійшов у систему. Іншими словами, при підключенні до сервісу з’являється діалогове вікно для імені користувача та пароля. Програма ніколи не може мати більше привілеїв, ніж користувач, який увійшов у систему.
  • Програми, які використовують дозволи програми, працюють без присутності користувача, який увійшов у систему. Наприклад, це програми, які працюють як фонові служби або демони. Лише адміністратор може надати дозвіл програми.

Крім того, зверніться до статті Microsoft Documentation для отримання додаткової інформації.

Процедура реєстрації залежить від типу вибраного дозволу. Щоб зареєструвати програму, зверніться до статті документації Microsoft.

C# .NET API для доступу до серверів електронної пошти

Щоб створити клієнти EWS, Imap і Smtp, ми будемо використовувати Aspose.Email for .NET. Це дивовижна бібліотека для реалізації клієнтських програм електронної пошти за допомогою .NET. Використовуючи бібліотеку, ви можете легко підключитися до серверів електронної пошти та отримати доступ до них. Ви можете встановити Aspose.Email for .NET через NuGet або завантажити його DLL.

PM> Install-Package Aspose.Email

Використовуйте сучасну автентифікацію з EwsClient

Після реєстрації програми ми можемо зосередитися на написанні коду, який складатиметься з наступних частин:

  • По-перше, отримайте маркер авторизації.
  • Потім використовуйте маркер для автентифікації.

Отримання маркера авторизації

Щоб отримати маркер, ми використаємо бібліотеку автентифікації Microsoft (MSAL) для .NET.

Нижче наведено кроки для отримання маркера авторизації в C#.

  • Додайте пакет Nuget Microsoft.Identity.Client, який містить двійкові файли MSAL.NET.
  • Створіть клас AccessParameters для зберігання облікових даних.
  • Нарешті, створіть метод, який приймає параметри доступу та використовує MSAL.NET для отримання маркера доступу.

Наступні зразки коду залежатимуть від вибраного типу авторизації.

Отримайте маркер із делегованою авторизацією

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

Отримайте маркер із автентифікацією програми

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

Використання маркера для автентифікації

Після цього, коли ми успішно отримаємо маркер, давайте ініціалізуємо EwsClient.

Використання маркера з делегованою авторизацією

NetworkCredential credentials = new OAuthNetworkCredential(accessToken);

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

Використання маркера з автентифікацією програми

// Використовуйте ім’я користувача Microsoft365 і маркер доступу
NetworkCredential credentials = new OAuthNetworkCredential(username, accessToken);

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

Використовуйте сучасну автентифікацію з клієнтами IMAP, POP або SMTP

Доступ IMAP, POP, SMTP через дозволи програми не підтримується. Іншими словами, підтримується лише делегована автентифікація.

Процедура реєстрації програми в Azure Active Directory описана вище.

Використовуйте центр адміністрування Microsoft 365, щоб увімкнути або вимкнути IMAP, POP, SMTP AUTH для певних поштових скриньок

  • Відкрийте Центр адміністрування Microsoft 365 і виберіть Користувачі > Активні користувачі.
  • Виберіть користувача та у розкривному вікні, що з’явиться, натисніть «Пошта».
  • У розділі Програми електронної пошти натисніть Керувати програмами електронної пошти.
  • Перевірте налаштування IMAP, POP, автентифікований SMTP: не позначено = вимкнено, позначено = увімкнено.
  • Нарешті натисніть Зберегти зміни.

Додавання коду для отримання маркера автентифікації з сервера маркерів

Переконайтеся, що ви вказали повні області, включаючи URL-адреси ресурсів Outlook.

Щоб отримати маркер, ми використаємо бібліотеку автентифікації Microsoft (MSAL) для .NET.

Нижче наведено кроки для отримання маркера авторизації в C#.

  • Додайте пакет Nuget Microsoft.Identity.Client, який містить двійкові файли MSAL.NET.
  • Створіть клас AccessParameters для зберігання облікових даних.
  • Нарешті, створіть метод, який приймає параметри доступу та використовує MSAL.NET для отримання маркера доступу.
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;
}

Використання маркера для автентифікації

Після цього, коли ми успішно отримаємо маркер, давайте ініціалізуємо ImapClient.

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

Так само ініціалізація SmtpClient виглядатиме так.

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

Отримайте безкоштовну ліцензію API

Ви можете використовувати Aspose.Email for .NET без оціночних обмежень за допомогою безкоштовної тимчасової ліцензії.

Висновок

У цій статті ви дізналися, як використовувати сучасну автентифікацію за допомогою API Aspose.Email для підключення до поштових скриньок Microsoft365. Крім того, ви переконалися, що ви можете легко створювати клієнтські програми електронної пошти, які відповідають розширеним вимогам безпеки. Ви можете дізнатися більше про Aspose.Email, використовуючи документацію. Якщо у вас виникнуть запитання, ви можете опублікувати їх на нашому форумі.

Дивись також