Από καιρό ανακοινώθηκε - τώρα πραγματικότητα : Η Microsoft έχει απενεργοποιήσει τον έλεγχο ταυτότητας με κωδικό πρόσβασης για ορισμένα πρωτόκολλα στο Exchange Online από τον Σεπτέμβριο του 2022 υπέρ του oAuth2. Τα ζητήματα του GitHub πολλών βιβλιοθηκών και σεναρίων αντιγράφων ασφαλείας καθιστούν σαφές ότι η αλλαγή αιφνιδίασε πολλούς διαχειριστές. Παρακάτω παρουσιάζουμε έναν τρόπο με τον οποίο μπορείτε να συνεχίσετε να έχετε πρόσβαση στα περιεχόμενα του γραμματοκιβωτίου Exchange με τη βοήθεια του oAuth2 μέσω PHP μέσω IMAP.
Από πλευράς ασφάλειας, η κίνηση της Microsoft είναι πολύ σωστή, αλλά η πολυπλοκότητα της πρόσβασης μέσω προγραμματισμού στα e-mail της έχει αυξηθεί αρκετά. Για παράδειγμα, εάν χρησιμοποιείτε την ευρέως χρησιμοποιούμενη βιβλιοθήκη barbushin/php-imap , η πρόσβαση ήταν ως εξής:
734a82898010e2fcb02c72c3cd9702c2
Απλώς δεν λειτουργεί πια. Για να δημιουργήσετε μια σύνδεση μέσω oAuth2, η πρώτη δυσκολία είναι να αποκτήσετε το διακριτικό πρόσβασης. Και για αυτό πρέπει να αντιμετωπίσετε δύο εμπόδια.
Azure Active Directory
Τα παρακάτω βήματα καταγράφουν μια νέα εφαρμογή στην υπηρεσία καταλόγου Active Directory του Azure:
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
συνδεθείτε μέσω του κανονικού Basic Auth (και οποιουδήποτε κωδικού πρόσβασης). Εάν θέλετε να ξεκινήσετε τον διακομιστή μεσολάβησης ως υπηρεσία στο παρασκήνιο κατά την εκκίνηση του συστήματος, μπορείτε να χρησιμοποιήσετε, για παράδειγμα 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