Офис 365 Аутентификация IMAP через библиотеку OAuth2 и Python MSALPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Офис 365 Аутентификация IMAP через библиотеку OAuth2 и Python MSAL

Сообщение Anonymous »

Я пытаюсь обновить устаревшего почтового бота для аутентификации через OAuth2 вместо базовой аутентификации, так как теперь он устарел через два дня. Логика, заменяя только бит аутентификации < /p>

Разработчики приложений, которые создали приложения, которые отправляют, читают или
в противном случае обрабатывают электронную почту, используя эти протоколы, будут иметь возможность сохранить такой же протокол
, но необходимо реализовать безопасную, современную аутентификацию
для своих пользователей. Эта функциональность построена на вершине
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)
Аутентификация IMAP выходит из строя, и, несмотря на настройку m.debug = 4 , выход не очень полезен

Код: Выделить всё

  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 
. Я не уверен, включает ли это область, необходимое для ресурса IMAP

Код: Выделить всё

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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Офис 365 Аутентификация IMAP через библиотеку OAuth2 и Python MSAL
    Anonymous » » в форуме Python
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Кодирование пути папки IMAP (IMAP UTF-7) для Python
    Anonymous » » в форуме Python
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Как я могу автоматизировать доступ к Office 365 по IMAP
    Anonymous » » в форуме C#
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Как я могу автоматизировать доступ к Office 365 по IMAP
    Anonymous » » в форуме C#
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Как я могу автоматизировать доступ к Office 365 по IMAP
    Anonymous » » в форуме C#
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»