如何使用 MailKit 中的 OAuth 2.0 连接到 Exchange Online?

How do I connect to Exchange Online using OAuth 2.0 in MailKit?

我有一个 Web 应用程序,它使用 MailKit 和基本身份验证通过 Exchange Online (Office365) 向用户发送电子邮件。我们公司是MS合作伙伴,因此有义务在2020年2月底之前关闭我们服务的基本身份验证。

所以,我想使用 OAuth 2.0 连接到 Exchange Online,类似于此 example. In fact, there might be a solution available according to this 但我找不到任何相关信息。

现在我正在使用 MS Identity Platform v2.0,但我不知道该怎么做。

如有任何帮助,我们将不胜感激。

更新 1

我不想代表登录用户发送邮件,而是有一个 Office365 用户帐户可用于向其他人发送邮件(通知等)。

更新 2

我设法使用 Microsoft Graph SDK 和 Username/Password Provider.

更接近我想做的事情

我们的用户帐户需要多因素身份验证,因此在使用用户密码时出现错误,因为我无法满足第二个因素。当我使用 app-password 验证失败时,因为密码不正确。

更新 3

我暂时切换到邮件中继。但如果我能找到答案,我会更新这个问题。

我建议查看 DotNetOpenAuth 或类似的图书馆并阅读他们的示例。如果 DotNetOpenAuth 库没有内置它们,您可能需要知道要用于此的 Windows 实时 URL。

示例可在此处找到:https://github.com/DotNetOpenAuth/DotNetOpenAuth.Samples

我的选择是调查 Microsoft Graph API . It is a single endpoint for all Microsoft services including Email. Email specific endpoints document is here

Microsoft 提供不同语言的 SDK 以使用 Graph 开发客户端应用程序 API。

在较高级别,您需要执行以下操作。

i) 在 Azure Active Directory 中注册一个应用程序。参见 here

ii) 使用 Oauth2 'authorization code grant' 流程获取刷新令牌。参见 here

iii) 将刷新令牌交换为访问令牌并使用访问令牌调用 Microsoft Graph API。

iv) 如果您有应用需要执行操作的用例,即使用户处于离线状态,您还需要存储刷新令牌。在这种情况下,请确保在步骤 ii)

中包含范围 'offline'

使用 Microsoft.Identity.Client 你可以生成一个令牌并通过然后使用它进行身份验证。

我发现了以下适用于我的项目的 IMAP、POP3 和 SMTP,以获得有效的解决方案。尽管该示例显示了交互式方法,但我正在尝试将客户端凭据流与应用程序密钥一起使用。

MailKit - Using OAuth2 With Exchange (IMAP, POP3 or SMTP)

Microsoft - Authenticate an IMAP, POP or SMTP connection using OAuth