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