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
Thjesht nuk funksionon më. Për të krijuar një lidhje nëpërmjet oAuth2, vështirësia e parë është të merrni shenjën e aksesit. Dhe për këtë ju duhet të përballeni me dy pengesa.
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 ta keni bërë këtë, pjesa tjetër nuk është shkencë raketash. Meqenëse barbushin/php-imap nuk mbështet oAuth2, mund të lidheni me bibliotekën alternative Webklex/php-imap (e cila gjithashtu ka avantazhin e moskërkimit të modulit PHP IMAP ).:
734a82898010e2fcb02c72c3cd9702c2
Sidoqoftë, bibliotekat që nuk mbështesin zyrtarisht oAuth2 mund të përdoren gjithashtu me një përfaqësues si p.sh 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 SMTP nëpërmjet Microsoft Exchange 365 ndjek të njëjtin parim si qasja IMAP: Që nga çaktivizimi i Autentifikimit Bazë, nuk ka alternativë ndaj OAuth2. Pas shtimit të lejes "SMTP.SendAsApp" në regjistrimin e aplikacionit Azure dhe dhënies së miratimit të administratorit, dërgimi mund të bëhet, për shembull, me... 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.