Anunțat de mult - acum realitate : Microsoft a dezactivat autentificarea prin parolă pentru anumite protocoale din Exchange Online din septembrie 2022 în favoarea oAuth2. Problemele GitHub ale multor biblioteci și scripturi de rezervă arată clar că schimbarea i-a surprins pe mulți administratori. Mai jos arătăm o modalitate prin care puteți continua să accesați conținutul căsuței dvs. poștale Exchange cu ajutorul oAuth2 prin PHP prin IMAP.
Din punct de vedere al securității, mișcarea Microsoft este foarte corectă, dar complexitatea accesului programatic la e-mailurile sale a crescut destul de mult. De exemplu, dacă utilizați biblioteca barbushin/php-imap folosită pe scară largă, accesul era după cum urmează:
734a82898010e2fcb02c72c3cd9702c2
Pur și simplu nu mai funcționează. Pentru a stabili o conexiune prin oAuth2, prima dificultate este obținerea jetonului de acces. Și pentru asta trebuie să învingi două obstacole.
Azure Active Directory
Următorii pași înregistrează o nouă aplicație în Azure Active Directory:













PowerShell
Acum transformăm aplicația în Microsoft PowerShell (mod Administrator) și atribuiți permisiuni căsuțelor poștale individuale (<TENANTID>
, <CLIENTID>
, <OBJECTID>
, <EMAIL>
trebuie înlocuit în fiecare caz):
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
...
Odată ce ai făcut asta, restul nu este știință rachetă. Deoarece barbushin/php-imap nu acceptă oAuth2, vă puteți conecta cu biblioteca alternativă Webklex/php-imap (care are și avantajul de a nu necesita modulul PHP IMAP ).:
734a82898010e2fcb02c72c3cd9702c2
Cu toate acestea, bibliotecile care nu acceptă oficial oAuth2 pot fi utilizate și cu un proxy, cum ar fi simonrob/email-oauth2-proxy fă-l funcțional. Dupa asta Descarca iar instalarea prin python -m pip install -r requirements-no-gui.txt
(Este necesar Python ≥3.6) editați fișierul emailproxy.config
de exemplu, după cum urmează (înlocuind această dată <TENANTID>
, <CLIENTID>
, <CLIENTSECRET>
și <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>
Apoi începeți proxy-ul cu python emailproxy.py --no-gui
și acum poate merge la IP-ul necriptat localhost
pe port 1993
conectați-vă prin autentificare de bază obișnuită (și orice set de parolă). Dacă doriți să porniți proxy-ul ca serviciu în fundal atunci când porniți sistemul, puteți utiliza, de exemplu systemd:
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
Dacă este necesară o conexiune criptată, acest lucru este și posibil - pentru aceasta creați mai întâi o cheie privată și un certificat autosemnat:
openssl genrsa -out key.pem 3072
openssl req -new -x509 -key key.pem -out cert.pem -days 360
Apoi se face referire în emailproxy.config
aceste două dosare:
local_key_path = /path/to/key.pem
local_certificate_path = /path/to/cert.pem