使用 OAUTH2 连接到 Outlook Office 365 IMAP

问题描述 投票:0回答:4

参考https://msdn.microsoft.com/en-us/office/office365/api/use-outlook-rest-api。 我还是看不懂AD、Outlook和windows live。

我从 https://login.microsoftonline.com/common/oauth2/v2.0/authorize 获得了刷新令牌和访问令牌 https://login.microsoftonline.com/common/oauth2/v2.0/token

和范围

openid电子邮件配置文件offline_access https://outlook.office.com/mail.send https://outlook.office.com/mail.readwrite

使用访问令牌连接 imap 时仍然遇到错误。

imap.authenticate('XOAUTH2', 'xxxxxxx', access_token)
Net::IMAP::NoResponseError: AUTHENTICATE failed.
email outlook oauth-2.0 office365 imap
4个回答
2
投票

我终于让它发挥作用了。 有趣的是,我必须使用范围

https://outlook.office365.com/IMAP.AccessAsUser.All
,尽管现在您必须在 Azure AD 中的 Graph API 部分下注册您的应用程序,并且建议的范围是
https://graph.microsoft.com/IMAP.AccessAsUser.All
,这对我不起作用(身份验证失败)。 虽然我不确定这种情况在不久的将来是否会改变。

我使用了此处所述的属性:https://javaee.github.io/javamail/OAuth2

props.put("mail.imap.sasl.enable", "true");
props.put("mail.imap.sasl.mechanisms", "XOAUTH2");
props.put("mail.imap.auth.login.disable", "true");
props.put("mail.imap.auth.plain.disable", "true");

1
投票

对于那些询问个人帐户 IMAP 的人 - Outlook.com
-- 回复:评论

显然消费者 Outlook.com(也是 live.com)的范围是

wl.imap

请参阅有关范围和权限的旧 Microsoft 文档。

另请看一下这个示例,其中提到了相同的范围:
http://afterlogic.com/mailbee-net/docs/OAuth2MicrosoftRegularAccountsInstalledApps.html

顺便说一句,我们从 Clever Components 文章中发现了旧的 Microsoft 文档:

https://www.clevercomponents.com/articles/article049/

  • 注意:他们声称这是针对 Office365 的,可能有问题,可能是他们的文档错误

其中有 Microsoft 文档的链接:

https://msdn.microsoft.com/en-us/windows/desktop/dn440163

在页面末尾列出的相关部分中有指向

Scopes and permissions
的链接:

https://msdn.microsoft.com/en-us/windows/desktop/hh243646

Clever Components 文章中,他们使用了两个范围

wl.imap
wl.offline_access

他们指出:

Microsoft 建议将“wl.offline_access”范围与“wl.imap”一起使用。否则,只有当用户登录 Live Connect 并使用您的应用程序时,应用程序才能访问用户的信息。”

因此,如果您的应用程序需要持续访问,那么您需要包含离线访问范围。


0
投票

请参阅 2020 年 4 月 30 日的最新 Microsoft 公告。

宣布 OAuth 2.0 支持 Exchange Online 中的 IMAP、SMTP 客户端协议

今天,我们宣布向 Exchange Online 邮箱提供适用于 IMAP、SMTP AUTH 协议的 OAuth 2.0 身份验证。


0
投票

这在我自己的 OAuth IMAP 实现中带来了极其令人沮丧的体验,因为 Microsoft 自己关于此主题的文档仍然建议使用

offline_access
https://outlook.office365.com/IMAP.AccessAsUser.All
等端点。

但是 当尝试在 Azure 门户中注册新应用程序 并转到“API 权限”侧边栏选项卡并选择“添加权限”时,“请求 API 权限”侧边栏弹出窗口在任何地方都没有提及

Office 365 Exchange Online
。它可以隐藏在“我的组织使用的 API”选项卡下,并从列表中选择它,但内部没有应用程序或委派权限匹配
IMAP.AccessAsUser.All
,尽管这是所有
https://outlook.office.com/*
API 端点的适当部分。

最后,您必须使用“请求 API 权限”屏幕顶部的大型“Microsoft Graph”API 按钮,并从那里选择

offline_access
IMAP.AccessAsUser.All
但不要使用它启用的 graphs.microsoft.com URL 。继续使用范围字符串:
offline_access https://outlook.office365.com/IMAP.AccessAsUser.All
对于这两个,OAuth 将在作为用于在 OAuth 弹出窗口中进行身份验证的电子邮件地址进行身份验证时起作用。

尽管

IMAP.AccessAsUser.All
仅此一点还不足以允许帐户在获取 OAuth 令牌后使用不同的
From:
地址发送。 OAuth 令牌也仅对用于为应用程序生成 OAuth 不记名令牌的电子邮件地址有效。必须授予更多权限才能接触其他邮箱。

© www.soinside.com 2019 - 2024. All rights reserved.