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

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

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 ASP.NET Core web API 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 alapvető hitelesítési hiba 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 System.Net.Mail .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 MailKit -vel ASP.NET Core, 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.

Gyakran ismételt kérdések az ASP.NET Core Outlook hitelesítésével kapcsolatban

  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 ConfidentialClientApplicationBuilder.Create() az alkalmazás konfigurálásához és SaslMechanismOAuth2() 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.

Utolsó gondolatok az Outlook hitelesítésről az ASP.NET Core segítségével

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.

Források és hivatkozások az Outlook hitelesítési problémáihoz
  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