Xác thực hiện đại hiện được bật theo mặc định cho tất cả người thuê Microsoft 365 / Azure mới vì giao thức này an toàn hơn so với Xác thực cơ bản không được dùng nữa. Xác thực hiện đại dựa trên Thư viện xác thực Active Directory và OAuth 2.0. Nó sử dụng mã thông báo giới hạn thời gian và các ứng dụng không lưu trữ thông tin đăng nhập của người dùng. Ngoài ra, có kế hoạch cấm hoàn toàn việc sử dụng Xác thực Cơ bản cho tất cả các máy khách Microsoft 365. Trong bài viết này, chúng tôi sẽ tập trung vào việc sử dụng Xác thực Hiện đại để kết nối qua các ứng dụng khách EWS, SMTP, IMAP, POP của Aspose.Email for .NET.

Cài đặt tiên quyết

Để sử dụng Xác thực Hiện đại, hãy đảm bảo rằng nó đã được bật. Tuy nhiên, đối với những người thuê được tạo trước ngày 1 tháng 8 năm 2017, xác thực hiện đại bị tắt theo mặc định. Trong Trung tâm quản trị Microsoft 365, đi tới Cài đặt> Cài đặt tổ chức> Xác thực hiện đại. Trong cửa sổ xác thực Hiện đại xuất hiện, bạn có thể xác định các giao thức không còn yêu cầu xác thực Cơ bản nữa. Đối với những người thuê Microsoft365 mới trong Azure, Xác thực Cơ bản bị tắt theo mặc định cho tất cả các ứng dụng. Do đó, văn bản sẽ được hiển thị trong phần này.

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.

Bạn có thể bật hỗ trợ Xác thực cơ bản cho người thuê từ cổng Azure, đi tới Azure Active Directory> Thuộc tính> Quản lý mặc định bảo mật> Bật mặc định bảo mật> Không. Để biết thêm thông tin, hãy xem Bài viết Tài liệu của Microsoft.

Đăng ký ứng dụng với Azure Active Directory

Đầu tiên, cần thực hiện đăng ký ứng dụng với Azure Active Directory. Có hai loại quyền có thể được sử dụng để truy cập hộp thư bằng ứng dụng của bạn. Chọn một loại quyền cụ thể, tùy thuộc vào ứng dụng bạn đang tạo:

  • Các ứng dụng sử dụng Quyền được ủy quyền có người dùng đã đăng nhập. Nói cách khác, khi bạn kết nối với dịch vụ, một cửa sổ hộp thoại sẽ xuất hiện cho tên người dùng và mật khẩu. Ứng dụng không bao giờ có thể có nhiều đặc quyền hơn người dùng đã đăng nhập.
  • Các ứng dụng sử dụng quyền Ứng dụng sẽ chạy mà không có người dùng đã đăng nhập. Ví dụ: đây là những ứng dụng chạy dưới dạng dịch vụ nền hoặc daemon. Chỉ quản trị viên mới có thể đồng ý với các quyền của ứng dụng.

Ngoài ra, hãy tham khảo Bài viết Tài liệu của Microsoft để biết thêm thông tin.

Thủ tục đăng ký phụ thuộc vào loại quyền được chọn. Để đăng ký ứng dụng của bạn, hãy tham khảo Bài viết Tài liệu của Microsoft.

C# .NET API để truy cập máy chủ email

Để tạo các ứng dụng khách EWS, Imap và Smtp, chúng tôi sẽ sử dụng Aspose.Email for .NET. Đây là một thư viện tuyệt vời để triển khai các ứng dụng email client sử dụng .NET. Sử dụng thư viện, bạn có thể dễ dàng kết nối và truy cập các máy chủ email. Bạn có thể cài đặt Aspose.Email for .NET qua NuGet hoặc tải xuống DLL của nó.

PM> Install-Package Aspose.Email

Sử dụng xác thực hiện đại với EwsClient

Sau khi đăng ký ứng dụng, chúng ta có thể tập trung vào việc viết mã, sẽ bao gồm các phần sau:

  • Đầu tiên, lấy mã thông báo ủy quyền.
  • Sau đó, sử dụng mã thông báo để xác thực.

Nhận mã thông báo ủy quyền

Để nhận mã thông báo, chúng tôi sẽ sử dụng Thư viện xác thực Microsoft (MSAL) cho .NET.

Sau đây là các bước để nhận mã thông báo ủy quyền trong C#.

  • Thêm gói phần mềm Microsoft.Identity.Client có chứa các tệp nhị phân của MSAL.NET.
  • Tạo một lớp AccessParameters để lưu trữ thông tin đăng nhập.
  • Cuối cùng, tạo một phương thức chấp nhận các tham số truy cập và sử dụng MSAL.NET để nhận mã thông báo truy cập.

Các mẫu mã sau đây sẽ phụ thuộc vào loại xác thực được chọn.

Nhận mã thông báo với xác thực được ủy quyền

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

Nhận mã thông báo với xác thực ứng dụng

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

Sử dụng mã thông báo để xác thực

Sau đó, khi chúng ta đã lấy được mã thông báo thành công, hãy khởi tạo EwsClient.

Sử dụng mã thông báo với xác thực được ủy quyền

NetworkCredential credentials = new OAuthNetworkCredential(accessToken);

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

Sử dụng mã thông báo với xác thực ứng dụng

// Sử dụng tên người dùng Microsoft365 và mã thông báo truy cập
NetworkCredential credentials = new OAuthNetworkCredential(username, accessToken);

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

Sử dụng xác thực hiện đại với ứng dụng khách IMAP, POP hoặc SMTP

Không hỗ trợ truy cập IMAP, POP, SMTP thông qua quyền ứng dụng. Nói cách khác, chỉ hỗ trợ xác thực được ủy quyền.

Quy trình đăng ký ứng dụng với Azure Active Directory được xác định ở trên.

Sử dụng trung tâm quản trị Microsoft 365 để bật hoặc tắt IMAP, POP, SMTP AUTH trên các hộp thư cụ thể

  • Mở Trung tâm quản trị Microsoft 365 và đi tới Người dùng> Người dùng đang hoạt động.
  • Chọn người dùng và trong cửa sổ xuất hiện, hãy nhấp vào Thư.
  • Trong phần Ứng dụng email, nhấp vào Quản lý ứng dụng email.
  • Xác minh cài đặt IMAP, POP, SMTP được xác thực: bỏ chọn = vô hiệu hóa, đã kiểm tra = đã bật.
  • Cuối cùng, nhấp vào Lưu thay đổi.

Thêm mã để nhận mã xác thực từ máy chủ mã thông báo

Đảm bảo chỉ định phạm vi đầy đủ, bao gồm cả URL tài nguyên Outlook.

Để nhận mã thông báo, chúng tôi sẽ sử dụng Thư viện xác thực Microsoft (MSAL) cho .NET.

Sau đây là các bước để nhận mã thông báo ủy quyền trong C#.

  • Thêm gói phần mềm Microsoft.Identity.Client có chứa các tệp nhị phân của MSAL.NET.
  • Tạo một lớp AccessParameters để lưu trữ thông tin đăng nhập.
  • Cuối cùng, tạo một phương thức chấp nhận các tham số truy cập và sử dụng MSAL.NET để nhận mã thông báo truy cập.
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;
}

Sử dụng mã thông báo để xác thực

Sau đó, khi chúng ta đã lấy được mã thông báo thành công, hãy khởi tạo ImapClient.

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

Tương tự, quá trình khởi tạo SmtpClient sẽ như sau.

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

Nhận giấy phép API miễn phí

Bạn có thể sử dụng Aspose.Email for .NET mà không có giới hạn đánh giá bằng cách sử dụng giấy phép tạm thời miễn phí.

Sự kết luận

Trong bài viết này, bạn đã học cách sử dụng xác thực hiện đại với API Aspose.Email để kết nối với hộp thư Microsoft365. Hơn nữa, bạn đã thấy rằng bạn có thể dễ dàng tạo các ứng dụng email client đáp ứng các yêu cầu bảo mật nâng cao. Bạn có thể tìm hiểu thêm về Aspose.Email bằng cách sử dụng tài liệu. Trong trường hợp bạn có bất kỳ câu hỏi nào, bạn có thể đăng lên diễn đàn của chúng tôi.

Xem thêm