現代身份驗證 現在默認為所有新的 Microsoft 365/Azure 租戶啟用,因為此協議比已棄用的基本身份驗證更安全。 現代身份驗證基於 Active Directory 身份驗證庫和 OAuth 2.0。它使用有時間限制的令牌,並且應用程序不存儲用戶憑據。 此外,還計劃完全禁止所有 Microsoft 365 客戶端使用基本身份驗證。 在本文中,我們將重點介紹使用現代身份驗證通過 Aspose.Email for .NET 的 EWS、SMTP、IMAP、POP 客戶端進行連接。

先決條件設置

要使用現代身份驗證,請確保它已啟用。但是,對於 2017 年 8 月 1 日之前創建的租戶,現代身份驗證默認處於關閉狀態。 在 Microsoft 365 管理中心 中,轉到“設置”>“組織設置”>“現代身份驗證”。在出現的現代身份驗證彈出窗口中,您可以識別不再需要基本身份驗證的協議。 對於 Azure 中的新 Microsoft365 租戶,默認情況下禁用所有應用程序的基本身份驗證。因此,文本將顯示在該部分中。

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 for .NET。這是一個很棒的庫,可以使用 .NET 實現電子郵件客戶端應用程序。使用該庫,您可以輕鬆連接和訪問電子郵件服務器。您可以通過 NuGet下載 它的 DLL 安裝 Aspose.Email for .NET。

PM> Install-Package Aspose.Email

將現代身份驗證與 EwsClient 結合使用

註冊好應用後,我們就可以專注於編寫代碼了,代碼將由以下幾部分組成:

  • 首先,獲取授權令牌。
  • 然後,使用令牌進行身份驗證。

獲取授權令牌

要獲取令牌,我們將使用 Microsoft Authentication Library (MSAL) for .NET

以下是在 C# 中獲取授權令牌的步驟。

  • 添加包含 MSAL.NET 二進製文件的 Microsoft.Identity.Client nuget 包
  • 創建一個 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 設置:未選中 = 禁用,選中 = 啟用。
  • 最後,單擊保存更改。

添加代碼以從令牌服務器獲取身份驗證令牌

確保指定完整範圍,包括 Outlook 資源 URL。

  • IMAP:https://outlook.office.com/IMAP.AccessAsUser.All
  • POP:https://outlook.office.com/POP.AccessAsUser.All
  • SMTP:https://outlook.office.com/SMTP.Send

要獲取令牌,我們將使用 Microsoft Authentication Library (MSAL) for .NET

以下是在 C# 中獲取授權令牌的步驟。

  • 添加包含 MSAL.NET 二進製文件的 Microsoft.Identity.Client nuget 包
  • 創建一個 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。

結論

在本文中,您了解瞭如何將現代身份驗證與 Aspose.Email API 結合使用以連接到 Microsoft365 郵箱。此外,您還看到可以輕鬆創建滿足高級安全要求的電子郵件客戶端應用程序。您可以使用 文檔 了解更多關於 Aspose.Email 的信息。如果您有任何問題,可以發帖到我們的論壇

也可以看看