लंबे समय से घोषित - अब वास्तविकता : Microsoft ने oAuth2 के पक्ष में सितंबर 2022 से एक्सचेंज ऑनलाइन में कुछ प्रोटोकॉल के लिए पासवर्ड द्वारा प्रमाणीकरण को बंद कर दिया है। कई पुस्तकालयों और बैकअप स्क्रिप्ट के GitHub मुद्दे यह स्पष्ट करते हैं कि बदलाव ने कई प्रशासकों को आश्चर्यचकित कर दिया। नीचे हम एक तरीका दिखाते हैं कि कैसे आप IMAP के माध्यम से PHP के माध्यम से oAuth2 की सहायता से अपने एक्सचेंज मेलबॉक्स की सामग्री तक पहुंच जारी रख सकते हैं।
सुरक्षा की दृष्टि से माइक्रोसॉफ्ट का यह कदम बहुत सही है, लेकिन इसके ई-मेल तक प्रोग्रामेटिक एक्सेस की जटिलता काफी बढ़ गई है। उदाहरण के लिए, यदि आप व्यापक रूप से उपयोग की जाने वाली बारबुशिन/php-imap लाइब्रेरी का उपयोग करते हैं, तो एक्सेस इस प्रकार हुआ करती थी:
734a82898010e2fcb02c72c3cd9702c2
यह बस अब और काम नहीं करता। OAuth2 के माध्यम से एक कनेक्शन स्थापित करने के लिए, पहली कठिनाई पहुँच टोकन प्राप्त करना है। और इसके लिए आपको दो बाधाओं का सामना करना पड़ेगा।
Azure सक्रिय निर्देशिका
निम्नलिखित चरण Azure सक्रिय निर्देशिका में एक नया ऐप पंजीकृत करते हैं:













पावरशेल
अब हम ऐप को में बदलते हैं माइक्रोसॉफ्ट पावरशेल (व्यवस्थापक मोड) और अलग-अलग मेलबॉक्सों को अनुमतियाँ असाइन करें (<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 का समर्थन नहीं करते हैं, उनका उपयोग प्रॉक्सी के साथ भी किया जा सकता है जैसे सिमोनरोब/ईमेल-oauth2-प्रॉक्सी इसे काम करने योग्य बनाएं। इसके बाद डाउनलोड और स्थापना के माध्यम से python -m pip install -r requirements-no-gui.txt (पायथन 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 रेगुलर बेसिक ऑथ (और कोई भी पासवर्ड सेट) के जरिए कनेक्ट करें। यदि आप सिस्टम शुरू करते समय पृष्ठभूमि में एक सेवा के रूप में प्रॉक्सी शुरू करना चाहते हैं, उदाहरण के लिए, आप इसका उपयोग कर सकते हैं 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
यदि एक एन्क्रिप्टेड कनेक्शन की आवश्यकता है, तो यह भी संभव है - इसके लिए आप पहले एक निजी कुंजी और एक स्व-हस्ताक्षरित प्रमाणपत्र बनाएं:
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
ईमेल भेजना
Microsoft Exchange Online के माध्यम से प्रोग्रामेटिक रूप से ईमेल भेजने की इच्छा रखने वाले किसी भी व्यक्ति को एक मूलभूत बदलाव का सामना करना पड़ रहा है: Microsoft ने Exchange Online में SMTP के लिए पारंपरिक उपयोगकर्ता नाम और पासवर्ड प्रमाणीकरण को अक्षम कर दिया है। जो काम वर्षों से कुछ ही पंक्तियों के कोड से हो जाता था, अब उसके लिए OAuth2 के माध्यम से अतिरिक्त प्रयास करने होंगे – जिसमें Azure Active Directory में ऐप पंजीकरण, प्रमाणपत्र और टोकन प्रबंधन शामिल हैं। हम ईमेल भेजने के साथ-साथ उन्हें प्राप्त करने के लिए भी यही तरीका अपना सकते हैं।




Microsoft Exchange 365 के माध्यम से SMTP द्वारा संदेश भेजना IMAP एक्सेस के समान सिद्धांत का पालन करता है: बेसिक ऑथेंटिकेशन के निष्क्रिय होने के बाद, OAuth2 के अलावा कोई विकल्प नहीं है। Azure ऐप पंजीकरण में "SMTP.SendAsApp" अनुमति जोड़ने और व्यवस्थापक की स्वीकृति प्राप्त करने के बाद, उदाहरण के लिए, संदेश भेजा जा सकता है... PHPMailer इसे लागू कर दिया गया है। पहले की तरह केवल उपयोगकर्ता नाम और पासवर्ड जमा करने के बजाय, अब SMTP सर्वर के विरुद्ध प्रमाणीकरण के लिए एक्सेस टोकन का उपयोग किया जाता है। smtp.office365.com:
734a82898010e2fcb02c72c3cd9702c2
शुरुआत में अतिरिक्त सेटअप का प्रयास थोड़ा मुश्किल लग सकता है, लेकिन लंबे समय में इसके फायदे मिलते हैं: OAuth2 आधारित प्रमाणीकरण कहीं अधिक सुरक्षित है, क्योंकि इसमें किसी भी सादे पासवर्ड को कॉन्फ़िगरेशन फ़ाइलों या स्क्रिप्ट में संग्रहीत करने की आवश्यकता नहीं होती है – और एक्सेस टोकन को समय-सीमित किया जा सकता है और इसकी अनुमतियों को सटीक रूप से नियंत्रित किया जा सकता है। इसके अलावा, मेलहेल्पर लाइब्रेरी का उल्लेख करना भी महत्वपूर्ण है, जो ईमेल प्राप्त करने और भेजने के लिए एक सुविधाजनक API प्रदान करती है।