Разработчики приложений, которые создали приложения, которые отправляют, читают или
в противном случае обрабатывают электронную почту, используя эти протоколы, будут иметь возможность сохранить такой же протокол
, но необходимо реализовать безопасную, современную аутентификацию
для своих пользователей. Эта функциональность построена на вершине
Microsoft Identity Platform v2.0 и поддерживает доступ к учетным записям Microsoft 365
< /p>
< /blockquote>
Примечание. Я явно выбрал поток учетных данных клиента, потому что документация гласит < /p>
Этот тип гранта обычно используется для взаимодействия с сервером к серверу
Это должно работать в фоновом режиме, без немедленного взаимодействия с
user.
< /blockquote>
Так что у меня есть скрипт Python, который извлекает токен доступа Использование библиотеки MSAL Python. Теперь я пытаюсь аутентифицироваться с сервером IMAP, используя этот токен доступа. Есть некоторые существующие потоки, показывающие, как подключиться к Google, я думаю, что мой случай довольно близок к этому, за исключением того, что я подключаюсь к серверу IMAP Office 365. Вот мой скрипт < /p>
Код: Выделить всё
import imaplib
import msal
import logging
app = msal.ConfidentialClientApplication(
'client-id',
authority='https://login.microsoftonline.com/tenant-id',
client_credential='secret-key'
)
result = app.acquire_token_for_client(scopes=['https://graph.microsoft.com/.default'])
def generate_auth_string(user, token):
return 'user=%s\1auth=Bearer %s\1\1' % (user, token)
# IMAP time!
mailserver = 'outlook.office365.com'
imapport = 993
M = imaplib.IMAP4_SSL(mailserver,imapport)
M.debug = 4
M.authenticate('XOAUTH2', lambda x: generate_auth_string('user@mydomain.com', result['access_token']))
print(result)
Код: Выделить всё
22:56.53 > b'DBDH1 AUTHENTICATE XOAUTH2'
22:56.53 < b'+ '
22:56.53 write literal size 2048
22:57.84 < b'DBDH1 NO AUTHENTICATE failed.'
22:57.84 NO response: b'AUTHENTICATE failed.'
Traceback (most recent call last):
File "/home/ubuntu/mini-oauth.py", line 21, in
M.authenticate("XOAUTH2", lambda x: generate_auth_string('user@mydomain.com', result['access_token']))
File "/usr/lib/python3.10/imaplib.py", line 444, in authenticate
raise self.error(dat[-1].decode('utf-8', 'replace'))
imaplib.IMAP4.error: AUTHENTICATE failed.
< /code>
Любая идея, где я могу пойти не так, или как получить более надежную информацию от сервера IMAP о том, почему аутентификация не удается? < /p>
< Strong> вещи, на которые я смотрел < /strong> < /p>
[list]
[*] Примечание Этот ответ больше не работает, так как предлагаемые области не могут генерировать токен доступа.
[*] Поток учетных данных, по -видимому, требует от гранта https://graph.microsoft.com/.default
Код: Выделить всё
https://outlook.office.com/IMAP.AccessAsUser.All
[*] Проверенный код, поднятый из потока Google, правильно создает строку SASL XOAuth2, согласно примеру в MS Docs
< /li>
< /ul>
import base64
user = 'test@contoso.onmicrosoft.com'
token = 'EwBAAl3BAAUFFpUAo7J3Ve0bjLBWZWCclRC3EoAA'
xoauth = "user=%s\1auth=Bearer %s\1\1" % (user, token)
xoauth = xoauth.encode('ascii')
xoauth = base64.b64encode(xoauth)
xoauth = xoauth.decode('ascii')
xsanity = 'dXNlcj10ZXN0QGNvbnRvc28ub25taWNyb3NvZnQuY29tAWF1dGg9QmVhcmVyIEV3QkFBbDNCQUFVRkZwVUFvN0ozVmUwYmpMQldaV0NjbFJDM0VvQUEBAQ=='
print(xoauth == xsanity) # prints True
< /code>
Этот поток, по -видимому, предполагает, что необходимо извлечь несколько токенов, один для графика, а затем другой для подключения IMAP; Может ли это быть то, что мне не хватает?
[/list]
Подробнее здесь: https://stackoverflow.com/questions/739 ... al-library