我正在尝试升级旧版邮件机器人以通过 Oauth2 而不是基本身份验证进行身份验证,因为它现在已在两天后被弃用。
该文档指出应用程序可以保留其原始逻辑,同时仅交换身份验证位
使用这些协议构建发送、阅读或以其他方式处理电子邮件的应用程序的应用程序开发人员将能够保留相同的协议,但需要为其用户实现安全、现代的身份验证体验。此功能构建在 Microsoft Identity 平台 v2.0 之上,支持访问 Microsoft 365 电子邮件帐户。
注意我已经明确选择了客户端凭据流程,因为文档指出
这种类型的授权通常用于必须在后台运行的服务器到服务器交互,而不需要立即与用户交互。
因此,我有一个 python 脚本,可以使用MSAL python 库检索访问令牌。现在我尝试使用该访问令牌向 IMAP 服务器进行身份验证。有一些现有的线程展示了如何连接到 Google,我想我的情况与此非常接近,只是我正在连接到 Office 365 IMAP 服务器。这是我的脚本
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'])) …Run Code Online (Sandbox Code Playgroud) 我有一个较旧的 Python 项目,它使用标准 IMAP 机制从邮箱检索电子邮件等进行处理。不幸的是,随着 MS365 现在淘汰非 OAuth2 和非现代身份验证,我必须尝试编写一个不依赖用户凭据但可以像使用 OAuth2 的其他用户一样完全访问身份验证等的应用程序。
我已经获取了 MSAL 库部分,并且可以从远程获取访问令牌 - 该应用程序配置了使用客户端密钥登录的工作流,并且可以访问所有用户的所有 EWS 以及应用程序权限中的所有 IMAP.UseAsApp。不过,我可能通过应用程序集成错误地请求了信息。
该应用程序正在使用 Azure AD 中分配给它的以下权限进行操作:
所述应用程序通过共享秘密而不是证书进行身份验证。
我们正在拉取 Outlook 范围,因为我们想要使用 Office 365 Exchange Online 的 IMAP 范围,并通过此令牌和 oauth 使用具有 IMAP 身份验证的内容,而且我不相信 MIcrosoft Graph API 具有任何可用的 IMAP 身份验证端点机制,
下面基本上是我尝试将 MSAL OAuth2 与 Azure AD 中配置的应用程序链接起来以获得工作调用的示例imap.authenticate,至少弄清楚如何使用不记名令牌完成 OAuth2 部分:
import imaplib
import msal
import pprint
import base64
conf = {
"authority": "https://login.microsoftonline.com/TENANT_ID",
"client_id": "APP_CLIENT_ID",
"scope": ["https://outlook.office.com/.default"],
"secret": "APP_SECRET_KEY",
"secret-id": "APP_SECRET_KEY (for documentation …Run Code Online (Sandbox Code Playgroud) 我需要使用 oauth2 和 imap 来连接 Gmail,我可以从https://github.com/simplegeo/python-oauth2看到代码:
import oauth2 as oauth
import oauth2.clients.imap as imaplib
# Set up your Consumer and Token as per usual. Just like any other
# three-legged OAuth request.
consumer = oauth.Consumer('your_consumer_key', 'your_consumer_secret')
token = oauth.Token('your_users_3_legged_token', 'your_users_3_legged_token_secret')
# Setup the URL according to Google's XOAUTH implementation. Be sure
# to replace the email here with the appropriate email address that
# you wish to access.
url = "https://mail.google.com/mail/b/your_users_email@gmail.com/imap/"
conn = imaplib.IMAP4_SSL('imap.googlemail.com')
conn.debug = 4
# This …Run Code Online (Sandbox Code Playgroud)