Egyszerű hitelesítési problémák megoldása az Outlook programban a MailKit és az ASP.NET Core Web API segítségével

OAuth2

Az Outlook hitelesítési problémáinak megértése az ASP.NET Core és a MailKit segítségével

Amikor az Outlook e-mail funkcióit egy A MailKit használatával a fejlesztők gyakran találkoznak hitelesítési problémákkal. Az egyik gyakori probléma az „535: 5.7.139 Authentication unsuccessful” hibaüzenet. Ez általában akkor fordul elő, ha az alapvető hitelesítési módszer le van tiltva az Outlook kiszolgálón, és a csatlakozási kísérlet meghiúsul.

Az egykor széles körben használt alapvető hitelesítést a biztonság fokozása érdekében a szolgáltatók, például a Microsoft, egyre inkább letiltották. Ehelyett a modern hitelesítési módszereket részesítik előnyben, például az OAuth2-t. Ez a váltás zavart okozhat, különösen a felhasználónevek és jelszavak közvetlen használatához szokott fejlesztők számára.

Ebben a forgatókönyvben előfordulhat, hogy a megfelelő Outlook SMTP-kiszolgáló beállításait és alkalmazásfüggő jelszavát használta, de továbbra is hitelesítési hibákkal szembesült. A problémák hatékony megoldásához elengedhetetlen annak megértése, hogy miért nem sikerül az alapvető hitelesítés. A hiba inkább a biztonsági szabályzat végrehajtását jelzi, nem pedig magával a kóddal.

Ebben a cikkben megvizsgáljuk, miért fordul elő ez a hiba, mi a kiváltó ok, és milyen lépéseket tehet a probléma megoldására. Megvitatjuk az alternatív hitelesítési módszereket is, például az OAuth2-t, amelyek biztosítják a biztonságos és sikeres kommunikációt az Outlook szervereivel.

Parancs Használati példa
ConfidentialClientApplicationBuilder.Create() Ezzel a paranccsal bizalmas ügyfélalkalmazást készíthet az OAuth2 hitelesítéshez. Ez a Microsoft Identity Client (MSAL) könyvtár része, és inicializálja az alkalmazást egy ügyfél-azonosítóval, lehetővé téve, hogy tokeneket szerezzen be a biztonságos kommunikációhoz.
SaslMechanismOAuth2() Ez a parancs kifejezetten a MailKitre vonatkozik, és e-mailek küldésekor OAuth2-tokennel történő hitelesítésre szolgál. Megkerüli az alapvető hitelesítést egy biztonságosabb módszerrel az OAuth2 protokollon keresztül.
AcquireTokenForClient(scopes).ExecuteAsync() Ez a metódus beszerez egy OAuth2-jogkivonatot az ügyfélalkalmazáshoz. Az MSAL-könyvtár része, és nélkülözhetetlen az API-k, például a Microsoft Graph vagy az SMTP-kiszolgálók hozzáférési jogkivonatainak generálásához.
GraphServiceClient Ezt az objektumot a Microsoft Graph API használja a Microsoft szolgáltatásokkal való interakcióhoz. Lehetővé teszi a fejlesztők számára, hogy e-maileket küldjenek, kezeljenek felhasználókat, vagy interakcióba lépjenek a Microsoft 365 egyéb erőforrásaival az OAuth2 tokenek használatával.
DelegateAuthenticationProvider() Ez a parancs a Microsoft Graph API kérések hitelesítési folyamatának beállítására szolgál. Minden API-kéréshez dinamikusan rendel egy OAuth2-jogkivonatot, biztosítva a biztonságos kommunikációt.
SendMail(message, false).Request().PostAsync() Ez a parancs a Graph API része, amely aszinkron módon küldi el az összeállított e-mail üzenetet. Az üzenetet a Microsoft Graph biztonságos e-mail küldési funkciójával elküldi a felhasználó postafiókjába.
SmtpClient.AuthenticateAsync() A MailKitben ez a parancs lehetővé teszi az ügyfél számára, hogy hitelesítési adatokkal, például OAuth2-jogkivonatokkal hitelesítsen az e-mail szerverrel. Felváltja a hagyományos felhasználónév és jelszó hitelesítési módszert.
SecureSocketOptions.StartTls Ez a parancs akkor használatos, amikor az SMTP-kiszolgálóhoz csatlakozik egy biztonságos, titkosított kapcsolat kikényszerítésére a STARTTLS protokollon keresztül, biztosítva az adatok biztonságos átvitelét a hálózaton keresztül.
MimeMessage Ez az osztály egy e-mail üzenetet jelent a MailKit könyvtárban. Olyan részleteket tartalmaz, mint az e-mail feladója, címzettje, tárgya és törzse. Elengedhetetlen az e-mail tartalmak küldés előtti létrehozásához és formázásához.

Az OAuth2 integráció felfedezése a biztonságos e-mail küldéshez

A fent megadott szkriptek célja a akkor fordul elő, amikor e-maileket küld az Outlook SMTP-kiszolgálóján keresztül egy ASP.NET Core Web API MailKit használatával. A hiba azért fordul elő, mert a Microsoft a biztonság fokozása érdekében letiltotta az alapvető hitelesítést, így a fejlesztők arra kényszerítették a fejlesztőket, hogy alkalmazzák az OAuth2-t, amely egy biztonságosabb hitelesítési módszer. Az első megoldásban a MailKit OAuth2 tokenekkel hitelesítettük és küldtük az e-mailt. A felhasználónév és jelszó használata helyett az OAuth2-nek egy tokenre van szüksége, amelyet a Microsoft Identity Client (MSAL) hoz létre, és a kérések biztonságos hitelesítésére szolgál.

Kezdetben a megoldás az MSAL-könyvtár részét képező `ConfidentialClientApplicationBuilder.Create()' metódust használja az ügyfélalkalmazás létrehozásához. Ez a lépés inicializálja az alkalmazást olyan alapvető hitelesítő adatokkal, mint az ügyfél-azonosító, a bérlői azonosító és az ügyfél titkossága, amelyek szükségesek az OAuth2-jogkivonat létrehozásához. Az alkalmazás elkészítése után az "AcquireTokenForClient()" metódus lekéri az Outlook SMTP-kiszolgálójával történő hitelesítéshez szükséges tokent. A "SaslMechanismOAuth2()" mechanizmus használatával a MailKit ezután hitelesíteni tudja az e-mail küldési folyamatot ezzel a tokennel, az alapvető hitelesítést teljesen megkerülve. Ez a módszer biztosítja, hogy az alkalmazás megfeleljen a modern biztonsági protokolloknak, és elkerülje az elavult módszereket.

A második megoldásban a Microsoft Graph API-t használják e-mailek küldésére anélkül, hogy közvetlenül kapcsolatba lépnének az SMTP-kiszolgálóval. A Microsoft Graph egy teljes körű megoldást kínál a Microsoft szolgáltatások, köztük az Outlook e-mailek kezelésére. A Graph API az OAuth2 hitelesítést használja a "DelegateAuthenticationProvider()" szolgáltatáson keresztül, amely minden kérelemhez egy OAuth2-jogkivonatot rendel. Ez a token hasonló módon jön létre az MSAL használatával. A "GraphServiceClient" objektum biztonságos kommunikációt tesz lehetővé a Microsoft szervereivel, lehetővé téve az API számára, hogy zökkenőmentesen küldjön e-maileket. Ez a módszer különösen hasznos azok számára, akik a Microsoft szolgáltatások szélesebb körét szeretnék kezelni, kevesebb közvetlen kapcsolattal az egyes szolgáltatásokhoz, például az SMTP-hez.

Végül a harmadik megoldásban egy hagyományosabb megközelítést vizsgáltunk a beépített megoldással .NET névtere. Bár továbbra is az OAuth2-t használja a hitelesítéshez, ez a módszer lecseréli a MailKit-et a System.Net.Mail SMTP-kliensére az e-mailek küldéséhez. Az OAuth2 token hitelesítő adatként kerül átadásra a szokásos felhasználónév és jelszó kombináció helyett. Az e-mail összeállítása és elküldése a tipikus "MailMessage" és "SmtpClient" objektumok használatával történik. Ez a megközelítés hasznos lehet azoknak a fejlesztőknek, akik szívesebben dolgoznak natív .NET-könyvtárakkal, de továbbra is biztonságos OAuth2-hitelesítést igényelnek az e-mailek küldéséhez.

Mindezek a módszerek nemcsak az alapvető hitelesítés letiltásának problémáját oldják meg, hanem az ASP.NET Core Web API e-mail-küldési funkcióját is a jövőre nézve megfelelővé teszik. Mindegyik megoldás kiemeli az OAuth2-n keresztüli biztonság fontosságát, felváltva az elavult és kevésbé biztonságos hitelesítési módszereket. A modern hitelesítési könyvtárak, például az MSAL és a Microsoft Graph kihasználásával a fejlesztők biztosíthatják, hogy alkalmazásaik továbbra is megfeleljenek a legújabb biztonsági szabványoknak, miközben továbbra is megbízható e-mail-küldési lehetőségeket kínálnak.

1. megoldás: Váltson OAuth2-re az Outlook hitelesítéshez

Ez a megközelítés az ASP.NET Core-t és a MailKit-et használja, az alapvető hitelesítést az OAuth2-vel helyettesítve, amely az Outlook biztonságos e-mail-küldésének ajánlott módszere.

// Step 1: Install required NuGet packages
// MailKit, MimeKit, and Microsoft.Identity.Client for OAuth2

using MailKit.Net.Smtp;
using MimeKit;
using Microsoft.Identity.Client;

// Step 2: Configure OAuth2 authentication
var clientId = "your-client-id";
var tenantId = "your-tenant-id";
var clientSecret = "your-client-secret";

var cca = ConfidentialClientApplicationBuilder
    .Create(clientId)
    .WithClientSecret(clientSecret)
    .WithAuthority(new Uri($"https://login.microsoftonline.com/{tenantId}"))
    .Build();

var scopes = new[] { "https://outlook.office365.com/.default" };
var result = await cca.AcquireTokenForClient(scopes).ExecuteAsync();

// Step 3: Send email using OAuth2 token
var emailMessage = new MimeMessage();
emailMessage.From.Add(new MailboxAddress("Your Name", "your-email@outlook.com"));
emailMessage.To.Add(new MailboxAddress("Recipient", "recipient@example.com"));
emailMessage.Subject = "Subject";
emailMessage.Body = new TextPart("plain") { Text = "Hello, this is a test email." };

using (var smtpClient = new SmtpClient())
{
    await smtpClient.ConnectAsync("smtp.office365.com", 587, SecureSocketOptions.StartTls);
    await smtpClient.AuthenticateAsync(new SaslMechanismOAuth2("your-email@outlook.com", result.AccessToken));
    await smtpClient.SendAsync(emailMessage);
    await smtpClient.DisconnectAsync(true);
}

2. megoldás: Microsoft Graph API használata e-mailek küldésére

Ez a módszer magában foglalja a Microsoft Graph API használatát az ASP.NET Core háttérrendszerről történő e-mailek küldésére, az SMTP konfiguráció teljes megkerülésével.

// Step 1: Add Microsoft.Graph NuGet package
using Microsoft.Graph;
using Microsoft.Identity.Client;

// Step 2: Configure Graph API and authentication
var confidentialClient = ConfidentialClientApplicationBuilder.Create(clientId)
    .WithTenantId(tenantId)
    .WithClientSecret(clientSecret)
    .Build();

var graphClient = new GraphServiceClient(new DelegateAuthenticationProvider(async (requestMessage) =>
{
    var authResult = await confidentialClient.AcquireTokenForClient(scopes).ExecuteAsync();
    requestMessage.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", authResult.AccessToken);
}));

// Step 3: Prepare and send email via Graph API
var message = new Message
{
    Subject = "Test Email",
    Body = new ItemBody
    {
        ContentType = BodyType.Text,
        Content = "Hello, this is a test email sent via Microsoft Graph API."
    },
    ToRecipients = new List<Recipient>()
    {
        new Recipient { EmailAddress = new EmailAddress { Address = "recipient@example.com" } }
    }
};

await graphClient.Users["your-email@outlook.com"].SendMail(message, false).Request().PostAsync();

3. megoldás: OAuth2 használata SMTP-vel (különböző könyvtár)

Ez a megközelítés a System.Net.Mail használatával küld e-maileket OAuth2-vel, a MailKit helyett, ugyanazzal az OAuth-hitelesítési módszerrel.

// Step 1: Configure OAuth2 with System.Net.Mail
var smtpClient = new SmtpClient("smtp.office365.com")
{
    Port = 587,
    EnableSsl = true,
    UseDefaultCredentials = false,
    Credentials = new NetworkCredential("your-email@outlook.com", accessToken)
};

// Step 2: Construct the email message
var mailMessage = new MailMessage
{
    From = new MailAddress("your-email@outlook.com"),
    Subject = "Test Email",
    Body = "This is a test email sent using System.Net.Mail with OAuth2.",
    IsBodyHtml = true
};

mailMessage.To.Add("recipient@example.com");

// Step 3: Send the email
await smtpClient.SendMailAsync(mailMessage);

Modern biztonsági szabványok alkalmazása az e-mail küldéshez

A modern levelezőrendszerekkel összefüggésben az alapvető hitelesítést egyre inkább elavultnak és bizonytalannak tekintik. Ez különösen igaz a nagyobb szolgáltatókra, például az Outlookra, amelyek letiltották az alapszintű hitelesítést a biztonságosabb mechanizmusok, például az OAuth2 érvényesítése érdekében. Az alapvető hitelesítés, amely kizárólag felhasználónéven és jelszón alapul, ki van téve a brute force támadásoknak, és a hitelesítési adatok ellopása esetén veszélybe kerülhet. Ezért az OAuth2-re való áttérés – ahogyan a Microsoft ösztönzi – biztosítja a tokenek biztonságos cseréjét, anélkül, hogy a felhasználói hitelesítési adatok nyilvánosságra kerülnének.

Az OAuth2 megvalósításának egyik kulcsfontosságú szempontja a hozzáférési jogkivonatok koncepciója. Ahelyett, hogy az SMTP-kiszolgálókon keresztüli közvetlen hitelesítésre hagyatkozna, az OAuth2 időhöz kötött tokeneket bocsát ki, amelyek biztonságos hozzáférést tesznek lehetővé az erőforrásokhoz, például az e-mail szolgáltatásokhoz. Ezeket a tokeneket egy engedélyezési kiszolgáló adja, és a fejlesztők olyan könyvtárak használatával szerezhetik meg őket, mint a Microsoft Identity Client (MSAL). Ezekkel a tokenekkel az alkalmazások korlátozott hozzáférést kapnak a felhasználói fiókokhoz, csökkentve a hosszan tartó, statikus hitelesítési adatokkal kapcsolatos kockázatokat.

Ezenkívül az OAuth2 alkalmazása nemcsak a modern biztonsági gyakorlatokhoz igazítja az alkalmazást, hanem fel is készíti a jövőbeli fejlesztésekre. Sok API, köztük a felhőalapú szolgáltatásokhoz használt API-k, mára nagymértékben támaszkodik az OAuth2-re a biztonságos kommunikáció érdekében. Ez biztosítja, hogy az e-mail küldési funkció működőképes és biztonságos maradjon a szolgáltatások fejlődésével. Integráló fejlesztőknek -vel , az OAuth2 használata számos biztonsági fejlesztést kínál, a token alapú hitelesítéstől a titkosított átvitelekig, például a STARTTLS protokollokon keresztül.

  1. Mi okozza az 535: 5.7.139 hibát az Outlook programban?
  2. Ez a hiba azért fordul elő, mert az Outlook SMTP-kiszolgálóján le van tiltva az alapvető hitelesítés. A Microsoft mostantól OAuth2-t igényel a biztonságos hitelesítéshez.
  3. Hogyan engedélyezhetem az OAuth2-t a MailKitben?
  4. A használatával megvalósíthatja az OAuth2-t az alkalmazás konfigurálásához és tokenekkel történő e-mail küldés hitelesítésére.
  5. Mi az alternatíva az alapvető hitelesítéshez az e-mailek küldéséhez az Outlookban?
  6. Az OAuth2 az előnyben részesített alternatíva. Felhasználónevek és jelszavak helyett tokeneket használ a biztonságos, időben korlátozott hitelesítéshez.
  7. A Microsoft Graph API jobb, mint az SMTP használata e-mailek küldésére?
  8. A Microsoft Graph API egy szélesebb körű szolgáltatás, amely nem csak e-mailek küldésére képes. Sokoldalúbb, és akkor ajánlott, ha különféle Microsoft 365-erőforrásokhoz van szüksége.
  9. Hogyan tesztelhetem, hogy az OAuth2 megfelelően működik-e az alkalmazásomban?
  10. Egységtesztekkel ellenőrizheti, hogy az OAuth2-jogkivonatokat generálja és megfelelően továbbítja az e-mail-küldő szolgáltatásnak.

Az Outlook alapvető hitelesítési hibájának megoldásához olyan modern biztonsági szabványokat kell alkalmazni, mint az OAuth2. Ez a megközelítés kiküszöböli az alapvető hitelesítés sebezhetőségét, és biztonságosabb módszert biztosít az üzenetek küldésére az Outlook SMTP-kiszolgálóján keresztül.

Az OAuth2 és az ASP.NET Core és a MailKit integrálásával a fejlesztők a jövőre is alkalmassá tehetik alkalmazásaikat, biztosítva a biztonságos kommunikációt és a frissített szolgáltatói követelményeknek való megfelelést. Ez nemcsak a hitelesítési problémát oldja meg, hanem javítja az általános biztonságot és funkcionalitást is.

  1. Részletes dokumentáció az alapvető hitelesítés és az OAuth2 megvalósítás Microsoft általi megszüntetéséről: Microsoft Exchange Online Basic Auth megszüntetése
  2. Átfogó útmutató a MailKit és a MimeKit használatához .NET-ben az e-mail funkciókhoz: MailKit dokumentáció
  3. MSAL (Microsoft Identity Client) könyvtár dokumentációja az OAuth2 hitelesítéshez: A Microsoft Identity Platform (MSAL) áttekintése