2

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

因此,我想使用 OAuth 2.0 连接到 Exchange Online,类似于此示例。事实上,根据这个答案可能有一个可用的解决方案,但我找不到任何关于它的东西。

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

任何帮助都将不胜感激。

更新 1

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

更新 2

我设法使用 Microsoft Graph SDK 和Username/Password Provider更接近我想要做的事情。

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

更新 3

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

4

3 回答 3

1

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

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

MailKit - 将 OAuth2 与 Exchange 结合使用(IMAP、POP3 或 SMTP)

Microsoft - 使用 OAuth 验证 IMAP、POP 或 SMTP 连接

于 2020-10-13T18:46:22.083 回答
1

我的选择是查看Microsoft Graph API。它是所有 Microsoft 服务(包括电子邮件)的单一端点。电子邮件特定端点文档在这里

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

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

i) 在 Azure Active Directory 中注册应用程序。看这里

ii) 使用 Oauth2“授权码授予”流程获取刷新令牌。看这里

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

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

于 2020-01-26T03:25:28.093 回答
0

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

示例可以在这里找到:https ://github.com/DotNetOpenAuth/DotNetOpenAuth.Samples

于 2020-01-24T19:19:08.167 回答