การรับรองความถูกต้องแบบสมัยใหม่ ขณะนี้เปิดใช้งานตามค่าเริ่มต้นสำหรับผู้เช่า Microsoft 365/Azure ใหม่ทั้งหมด เนื่องจากโปรโตคอลนี้มีความปลอดภัยมากกว่าการรับรองความถูกต้องพื้นฐานที่เลิกใช้แล้ว การรับรองความถูกต้องสมัยใหม่ขึ้นอยู่กับ Active Directory Authentication Library และ OAuth 2.0 ใช้โทเค็นแบบจำกัดเวลา และแอปพลิเคชันไม่เก็บข้อมูลรับรองผู้ใช้ นอกจากนี้ มีการวางแผนที่จะห้ามการใช้การรับรองความถูกต้องพื้นฐานสำหรับไคลเอนต์ Microsoft 365 ทั้งหมดโดยสมบูรณ์ ในบทความนี้ เราจะมุ่งเน้นไปที่การใช้ Modern Authentication เพื่อเชื่อมต่อผ่านไคลเอ็นต์ 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 > Properties > Manage Security defaults > Enable Security defaults > No สำหรับข้อมูลเพิ่มเติม โปรดดูที่ Microsoft Documentation Article

การลงทะเบียนแอปกับ Azure Active Directory

ประการแรก จำเป็นต้องดำเนินการลงทะเบียนแอปกับ Azure Active Directory มีสิทธิ์สองประเภทที่สามารถใช้เพื่อเข้าถึงกล่องจดหมายด้วยแอพของคุณ เลือกประเภทการอนุญาตเฉพาะ ขึ้นอยู่กับแอปที่คุณกำลังสร้าง:

  • แอปที่ใช้สิทธิ์ที่ได้รับมอบสิทธิ์มีผู้ใช้ที่ลงชื่อเข้าใช้อยู่ กล่าวอีกนัยหนึ่ง เมื่อคุณเชื่อมต่อกับบริการ หน้าต่างโต้ตอบจะปรากฏขึ้นสำหรับชื่อผู้ใช้และรหัสผ่าน แอปไม่สามารถมีสิทธิ์มากกว่าผู้ใช้ที่ลงชื่อเข้าใช้
  • แอปที่ใช้การอนุญาตของแอปพลิเคชันจะทำงานโดยไม่มีผู้ใช้ที่ลงชื่อเข้าใช้อยู่ ตัวอย่างเช่น แอปเหล่านี้ทำงานเป็นบริการพื้นหลังหรือภูต เฉพาะผู้ดูแลระบบเท่านั้นที่สามารถยินยอมให้อนุญาตแอปพลิเคชันได้

นอกจากนี้ โปรดดู Microsoft Documentation Article สำหรับข้อมูลเพิ่มเติม

ขั้นตอนการลงทะเบียนขึ้นอยู่กับประเภทของการอนุญาตที่เลือก หากต้องการลงทะเบียนแอปของคุณ โปรดดูที่ Microsoft Documentation Article

C# .NET API เพื่อเข้าถึงเซิร์ฟเวอร์อีเมล

ในการสร้างไคลเอ็นต์ EWS, Imap และ Smtp เราจะใช้ Aspose.Email for .NET เป็นไลบรารีที่ยอดเยี่ยมสำหรับการติดตั้งแอปอีเมลไคลเอ็นต์โดยใช้ .NET เมื่อใช้ไลบรารี คุณสามารถเชื่อมต่อและเข้าถึงเซิร์ฟเวอร์อีเมลได้อย่างง่ายดาย คุณสามารถติดตั้ง Aspose.Email for .NET ผ่าน NuGet หรือ ดาวน์โหลด DLL

PM> Install-Package Aspose.Email

ใช้การรับรองความถูกต้องสมัยใหม่กับ EwsClient

หลังจากลงทะเบียนแอปพลิเคชันแล้ว เราสามารถมุ่งเน้นไปที่การเขียนโค้ด ซึ่งจะประกอบด้วยส่วนต่าง ๆ ดังต่อไปนี้:

  • ประการแรก รับโทเค็นการให้สิทธิ์
  • จากนั้นใช้โทเค็นเพื่อตรวจสอบสิทธิ์

รับโทเค็นการอนุญาต

ในการรับโทเค็น เราจะใช้ Microsoft Authentication Library (MSAL) for .NET

ต่อไปนี้เป็นขั้นตอนในการรับโทเค็นการอนุญาตใน C#

  • เพิ่ม Microsoft.Identity.Client nuget package ที่มีไบนารีของ 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 admin center และไปที่ Users > Active users
  • เลือกผู้ใช้ และในเมนูลอยที่ปรากฏ ให้คลิก Mail
  • ในส่วนแอปอีเมล ให้คลิกจัดการแอปอีเมล
  • ตรวจสอบการตั้งค่า IMAP, POP, SMTP ที่รับรองความถูกต้อง: ยกเลิกการเลือก = ปิดใช้งาน, ตรวจสอบ = เปิดใช้งาน
  • สุดท้าย คลิกบันทึกการเปลี่ยนแปลง

การเพิ่มรหัสเพื่อรับโทเค็นการรับรองความถูกต้องจากเซิร์ฟเวอร์โทเค็น

ตรวจสอบให้แน่ใจว่าได้ระบุขอบเขตทั้งหมด รวมถึง URL ทรัพยากรของ Outlook

ในการรับโทเค็น เราจะใช้ Microsoft Authentication Library (MSAL) for .NET

ต่อไปนี้เป็นขั้นตอนในการรับโทเค็นการอนุญาตใน C#

  • เพิ่ม Microsoft.Identity.Client nuget package ที่มีไบนารีของ 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 ได้โดยไม่มีข้อจำกัดในการประเมินโดยใช้ ใบอนุญาตชั่วคราวฟรี

บทสรุป

ในบทความนี้ คุณได้เรียนรู้วิธีใช้การรับรองความถูกต้องสมัยใหม่กับ Aspose.Email API เพื่อเชื่อมต่อกับกล่องจดหมาย Microsoft365 นอกจากนี้ คุณยังเห็นว่าคุณสามารถสร้างแอปพลิเคชันอีเมลไคลเอ็นต์ที่ตรงตามข้อกำหนดด้านความปลอดภัยขั้นสูงได้อย่างง่ายดาย คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับ Aspose.Email โดยใช้ เอกสารประกอบ ในกรณีที่คุณมีคำถาม คุณสามารถโพสต์ได้ที่ ฟอรัม ของเรา

ดูสิ่งนี้ด้วย