Վաղուց հայտարարված , այժմ իրականություն . Microsoft-ը 2022 թվականի սեպտեմբերից անջատել է որոշակի արձանագրությունների գաղտնաբառով նույնականացումը Exchange Online-ում՝ հօգուտ oAuth2-ի: Շատ գրադարանների և պահեստային սցենարների GitHub-ի խնդիրները պարզ են դարձնում, որ փոփոխությունը զարմացրել է շատ ադմինիստրատորների: Ստորև մենք ցույց ենք տալիս մի միջոց, թե ինչպես կարող եք շարունակել մուտք գործել ձեր Exchange փոստարկղի բովանդակությունը oAuth2-ի օգնությամբ PHP-ի միջոցով IMAP-ի միջոցով:
Անվտանգության տեսանկյունից Microsoft-ի քայլը շատ ճիշտ է, բայց նրա էլ. փոստին ծրագրային հասանելիության բարդությունը բավականին մեծացել է։ Օրինակ, եթե դուք օգտագործում եք լայնորեն օգտագործվող barbushin/php-imap գրադարանը , մուտքը նախկինում հետևյալն էր.:
734a82898010e2fcb02c72c3cd9702c2
Դա պարզապես այլեւս չի աշխատում: oAuth2-ի միջոցով կապ հաստատելու համար առաջին դժվարությունը մուտքի նշան ստանալն է: Եվ դրա համար դուք պետք է դիմեք երկու խոչընդոտների:
Azure Active Directory
Հետևյալ քայլերը գրանցում են նոր հավելված Azure Active Directory-ում:
PowerShell
Այժմ մենք միացնում ենք հավելվածը Microsoft PowerShell (Ադմինիստրատորի ռեժիմ) և թույլտվություններ տրամադրեք առանձին փոստարկղերին (<TENANTID>
, <CLIENTID>
, <OBJECTID>
, <EMAIL>
պետք է փոխարինվի յուրաքանչյուր դեպքում):
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
...
Երբ դուք դա արել եք, մնացածը հրթիռային գիտություն չէ: Քանի որ barbushin/php-imap- ը չի աջակցում oAuth2-ին, դուք կարող եք միանալ Webklex/php-imap այլընտրանքային գրադարանի հետ (որն ունի նաև PHP IMAP մոդուլ չպահանջելու առավելությունը)::
734a82898010e2fcb02c72c3cd9702c2
Այնուամենայնիվ, գրադարանները, որոնք պաշտոնապես չեն աջակցում oAuth2-ին, կարող են օգտագործվել նաև վստահված անձի հետ, ինչպիսին է simonrob/email-oauth2-proxy դարձնել այն գործունակ: Սրանից հետո Բեռնել և տեղադրումը միջոցով python -m pip install -r requirements-no-gui.txt
(Պահանջվում է Python ≥3.6) դուք խմբագրում եք ֆայլը emailproxy.config
օրինակ՝ հետևյալ կերպ (փոխարինելով այս անգամ <TENANTID>
, <CLIENTID>
, <CLIENTSECRET>
և <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>
Այնուհետև դուք սկսում եք վստահված անձը python emailproxy.py --no-gui
և այժմ կարող է չգաղտնագրված անցնել IP-ին localhost
նավահանգստի վրա 1993
միացեք սովորական Հիմնական վավերացման միջոցով (և ցանկացած գաղտնաբառի հավաքածու): Եթե ցանկանում եք գործարկել վստահված անձը որպես ծառայություն ֆոնային ռեժիմում, երբ սկսում եք համակարգը, կարող եք օգտագործել, օրինակ համակարգված:
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
Եթե անհրաժեշտ է գաղտնագրված կապ, դա նույնպես հնարավոր է. դրա համար նախ ստեղծեք անձնական բանալի և ինքնաստորագրված վկայագիր:
openssl genrsa -out key.pem 3072
openssl req -new -x509 -key key.pem -out cert.pem -days 360
Այնուհետև հղում է կատարվում emailproxy.config
այս երկու ֆայլերը:
local_key_path = /path/to/key.pem
local_certificate_path = /path/to/cert.pem