我有一个 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
我现在改用邮件转发。但如果我能找到答案,我会更新这个问题。
oauth-2.0 mailkit microsoft-identity-platform microsoft-graph-api
最近宣布支持 Exchange Online 中的 IMAP 和 SMTP 的 OAuth 2.0。按照指南,我设置了应用程序权限以及 IMAP 和 SMTP 连接。应用程序配置为Accounts in any organizational directory (Any Azure AD directory - Multitenant)
并使用授权代码流。
以下 URL 用于授权:
并且添加了以下委派 Microsoft Graph 范围:
范围,来自代码的请求:
final List<String> scopes = Arrays.asList(
"offline_access",
"email",
"openid",
"profile",
"User.Read",
"Mail.ReadWrite",
"https%3A%2F%2Foutlook.office365.com%2FIMAP.AccessAsUser.All",
"https%3A%2F%2Foutlook.office365.com%2FSMTP.Send"
);
Run Code Online (Sandbox Code Playgroud)
我成功收到访问和刷新令牌:
{
"token_type": "Bearer",
"scope": "email IMAP.AccessAsUser.All Mail.ReadWrite openid profile SMTP.Send User.Read",
"expires_in": 3599,
"ext_expires_in": 3599,
"access_token": "edited",
"refresh_token": "edited",
"id_token": "edited"
}
Run Code Online (Sandbox Code Playgroud)
这是用于连接到 …