vložil Radek Červinka
22. října 2022 10:29
Jak velké firmy poskytující email služby přitvrzují v bezpečnosti, vzrůstá požadavek na implementaci těchto pravidel i do našich aplikací. Poslední deadline od MS ohledně finálního odříznutí klasické autentizace u IMAP na office.com mne donutil implementovat "modern autentization" (což je klasicky OAuth2) i do našeho systému. Naštěstí jsem mohl vycházet z otevřeného řešení.
Z historických důvodů mail systém je u nás postaven na Indy, ale pro Synapsi by to bylo podobné. Pro MS je celý mechanismus autentizaci popsán celkem srozumitelně Authenticate an IMAP, POP or SMTP connection using OAuth a to včetně nastavení.
Základní kód, ze kterého jsem vycházel je github.com/geoffsmith82/GmailAuthSMTP, který se dá velmi rozumně použít a jako demo rychle rozchodit (v podstate jen přejmenujete globals.sample.pas na globals.pas, modifikujete ID a můžete zkoušet). Pro synapsi je i řešení Synapse, OAuth2, Imap & Gmail, případně github.com/rvk01/google-oauth2.
Celý systém v podstatě funguje tak, že pro první použití se provede autentizace přes web (z programu se spustí prohlížeč se specifikovanou adresou), zároveň se spustí lokální HTTP server, který odchytí odpověď s tokenem, který se nazývá refresh token. Ten si zapamatujeme, a od té doby ho můžeme používat pro získátní jiného tokenu (access token), který bude používán pro vlastní autentizaci, a který se mění. Zbytek je pak stejný jako u klasického přihlašování.
Pokud budete používat dané řešení proti MS, jen dvě takové poznámky:
- při registraci aplikace uveďte URI pro přesměrování http://localhost:2132 (tam je namířen ten lokální http server číhající na token)
- při autentizaci přes web nesmíte být přihlášeni do office, jinak nebude vynucen login a autentizační token bude svázán s přihlášeným uživatelem a IMAP bude vracet "A3 BAD User is authenticated but not connected" (to bolelo, protože chyba je na internetu často, ale řešení nikde)
Podobně je to u SMTP (ale tam to není tak kritické, protože MS nemůže odříznout různé jednodušší zařízení jako kopírky od rozesílání mailů). U POP3 mi to u MS nefunguje, i když by to mělo být od MS podporované.