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

Предварительные настройки

Чтобы использовать современную аутентификацию, убедитесь, что она включена. Однако для клиентов, созданных до 1 августа 2017 г., современная проверка подлинности отключена по умолчанию. В центре администрирования Microsoft 365 выберите «Настройки» > «Настройки организации» > «Современная проверка подлинности». Во всплывающем меню «Современная проверка подлинности» можно указать протоколы, для которых больше не требуется обычная проверка подлинности. Для новых клиентов Microsoft 365 в 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.

Регистрация приложения в Azure Active Directory

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

  • В приложениях, использующих делегированные разрешения, присутствует вошедший пользователь. Другими словами, при подключении к услуге появляется диалоговое окно для ввода имени пользователя и пароля. У приложения никогда не может быть больше привилегий, чем у вошедшего в систему пользователя.
  • Приложения, использующие разрешения для приложений, запускаются без присутствия вошедшего пользователя. Например, это приложения, работающие как фоновые службы или демоны. Только администратор может давать разрешения приложениям.

Кроме того, обратитесь к статье документации Microsoft для получения дополнительной информации.

Процедура регистрации зависит от выбранного типа разрешения. Чтобы зарегистрировать свое приложение, обратитесь к статье документации Microsoft.

C# .NET API для доступа к почтовым серверам

Для создания клиентов EWS, Imap и Smtp мы будем использовать Aspose.Email для .NET. Это замечательная библиотека для реализации клиентских приложений электронной почты с использованием .NET. Используя библиотеку, вы можете легко подключаться и получать доступ к почтовым серверам. Вы можете установить Aspose.Email для .NET через NuGet или скачать его DLL.

PM> Install-Package Aspose.Email

Используйте современную аутентификацию с EwsClient

После регистрации приложения мы можем сосредоточиться на написании кода, который будет состоять из следующих частей:

  • Во-первых, получите токен авторизации.
  • Затем используйте токен для аутентификации.

Получение токена авторизации

Чтобы получить токен, мы будем использовать Microsoft Authentication Library (MSAL) для .NET.

Ниже приведены шаги для получения токена авторизации в C#.

  • Добавьте пакет Microsoft.Identity.Client nuget, содержащий двоичные файлы 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);

Использование токена с аутентификацией приложения

// Используйте имя пользователя Microsoft 365 и токен доступа
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 Authentication Library (MSAL) для .NET.

Ниже приведены шаги для получения токена авторизации в C#.

  • Добавьте пакет Microsoft.Identity.Client nuget, содержащий двоичные файлы 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 для .NET без оценочных ограничений, используя бесплатную временную лицензию.

Вывод

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

Смотрите также