Prezantuar prej kohësh - tani realitet : Microsoft ka çaktivizuar vërtetimin me fjalëkalim për protokolle të caktuara në Exchange Online nga shtatori 2022 në favor të oAuth2. Çështjet e GitHub të shumë bibliotekave dhe skripteve rezervë e bëjnë të qartë se ndryshimi kapi shumë administratorë në befasi. Më poshtë ne tregojmë një mënyrë se si mund të vazhdoni të aksesoni përmbajtjen e kutisë tuaj postare Exchange me ndihmën e oAuth2 nëpërmjet PHP nëpërmjet IMAP.
Nga pikëpamja e sigurisë, lëvizja e Microsoft është shumë korrekte, por kompleksiteti i aksesit programatik në emailet e tij është rritur mjaft. Për shembull, nëse përdorni bibliotekën barbushin/php-imap të përdorur gjerësisht, qasja dikur ishte si më poshtë:
734a82898010e2fcb02c72c3cd9702c2
Nuk është më kaq e thjeshtë. Vendosja e një lidhjeje nëpërmjet OAuth2 tani kërkon së pari marrjen e tokenit të aksesit. Kjo kërkon kapërcimin e dy pengesave.
Azure Active Directory
Hapat e mëposhtëm regjistrojnë një aplikacion të ri në Azure Active Directory:













PowerShell
Tani e kthejmë aplikacionin në Microsoft PowerShell (Modaliteti i administratorit) dhe caktoni leje për kutitë postare individuale (<TENANTID>, <CLIENTID>, <OBJECTID>, <EMAIL> duhet të zëvendësohet në çdo rast):
Install-Module -Name ExchangeOnlineManagement
Import-Module ExchangeOnlineManagement
Connect-ExchangeOnline -Organization <TENANTID>
New-ServicePrincipal -AppId <CLIENTID> -ServiceId <OBJECTID>
Add-MailboxPermission -Identity "<EMAIL>" -User <OBJECTID> -AccessRights FullAccess
...
Pasi të keni mbaruar këtë, pjesa tjetër është shumë e lehtë. Meqenëse barbushin/php-imap nuk e mbështet oAuth2, mund të krijoni, për shembull, një lidhje duke përdorur bibliotekën alternative Webklex/php-imap (e cila ka edhe avantazhin e moskërkimit të modulit PHP IMAP ).:
734a82898010e2fcb02c72c3cd9702c2
Por bibliotekat që nuk e mbështesin zyrtarisht oAuth2 mund të përdoren gjithashtu me ndihmën e një përfaqësuesi si simonrob/email-oauth2-proxy e bëjnë të realizueshme. Pas kësaj Shkarko dhe instalimi nëpërmjet python -m pip install -r requirements-no-gui.txt (Kërkohet Python ≥ 3.6) ju redaktoni skedarin emailproxy.config p.sh. si më poshtë (duke zëvendësuar këtë herë <TENANTID>, <CLIENTID>, <CLIENTSECRET> dhe <EMAIL>):
[Server setup]
[IMAP-1993]
local_address = localhost
server_address = outlook.office365.com
server_port = 993
[Account setup]
[<EMAIL>]
token_url = https://login.microsoftonline.com/<TENANTID>/oauth2/v2.0/token
oauth2_scope = https://outlook.office365.com/.default
redirect_uri = http://localhost:8080
client_id = <CLIENTID>
client_secret = <CLIENTSECRET>
Pastaj filloni përfaqësuesin me python emailproxy.py --no-gui dhe tani mund të shkojë në IP pa kod localhost në port 1993 lidheni përmes Auth-it të rregullt bazë (dhe çdo fjalëkalimi të caktuar). Nëse dëshironi të nisni përfaqësuesin si shërbim në sfond kur filloni sistemin, mund ta përdorni, për shembull sistemuar:
sudo systemctl edit --force --full emailproxy.service
[Unit]
Description=Email OAuth 2.0 Proxy
[Service]
ExecStart=/usr/bin/python /path/to/emailproxy.py --no-gui
Restart=always
[Install]
WantedBy=multi-user.target
sudo systemctl enable emailproxy.service --now
sudo systemctl status emailproxy.service
sudo systemctl start emailproxy.service
Nëse kërkohet një lidhje e koduar, kjo është gjithashtu e mundur - për këtë së pari krijoni një çelës privat dhe një certifikatë të vetë-nënshkruar:
openssl genrsa -out key.pem 3072
openssl req -new -x509 -key key.pem -out cert.pem -days 360
Pastaj referenca bëhet në emailproxy.config këto dy skedarë:
local_key_path = /path/to/key.pem
local_certificate_path = /path/to/cert.pem
Dërgimi i email-eve
Kushdo që dëshiron të dërgojë email-e në mënyrë programore nëpërmjet Microsoft Exchange Online po përballet gjithashtu me një ndryshim themelor: Microsoft ka çaktivizuar vërtetimin klasik të emrit të përdoruesit dhe fjalëkalimit për SMTP në Exchange Online. Ajo që është arritur me vetëm disa rreshta kodi për vite me radhë, tani kërkon devijimin nëpërmjet OAuth2 - duke përfshirë regjistrimin e aplikacionit në Azure Active Directory, certifikatat dhe menaxhimin e token-eve. Ne mund të zbatojmë të njëjtën qasje për dërgimin e email-eve, përveç marrjes së tyre.




Dërgimi i SMTP përmes Microsoft Exchange 365 ndjek të njëjtin parim si aksesi IMAP: edhe këtu, nuk ka asnjë rrugëdalje nga oAuth2 pasi Autentifikimi Bazë u çaktivizua. Pas shtimit të lejes "SMTP.SendAsApp" në regjistrimin e aplikacionit Azure dhe dhënies së pëlqimit të administratorit, dërgimi mund të bëhet, p.sh. PHPMailer Kjo është zbatuar. Në vend që thjesht të paraqitet një emër përdoruesi dhe fjalëkalim si më parë, vërtetimi kundrejt serverit SMTP tani përdor një token aksesi. smtp.office365.com:
734a82898010e2fcb02c72c3cd9702c2
Përpjekja shtesë për konfigurim mund të duket fillimisht e frikshme, por në planin afatgjatë ia vlen: Autentifikimi i bazuar në OAuth2 është dukshëm më i sigurt, pasi nuk ka nevojë të ruhen fjalëkalime me tekst të thjeshtë në skedarë konfigurimi ose skripte - dhe tokeni i aksesit mund të jetë gjithashtu i kufizuar në kohë dhe lejet e tij të kontrollohen me saktësi të detajuar. Gjithashtu, vlen të përmendet këtu biblioteka mailhelper , e cila ofron një API të përshtatshëm për marrjen dhe dërgimin e email-eve.