了解如何使用 OAuth 身份验证与 SMTP 协议连接,以及访问Office 365用户的电子邮件数据。
Microsoft 365 ((包括Office web 版) 和 Outlook.com 用户)都支持下面所述的对 SMTP 协议的 OAuth2 支持。
如果不熟悉 OAuth 2.0 协议,请参阅Microsoft 标识平台概述上的 OAuth 2.0 协议。 有关Microsoft身份验证库 (MSAL) 的详细信息,这些库实现 OAuth 2.0 协议对用户进行身份验证并访问安全 API,请参阅 MSAL 概述。
注册应用程序
若要使用 OAuth,必须使用 Microsoft Entra 注册应用程序。
按照使用 Microsoft 标识平台注册应用程序中列出的说明创建新的应用程序。
至少以云应用程序管理员身份登录到Microsoft Entra 管理中心。
浏览到“标识>应用程序”>应用注册并选择“新建注册”。
输入应用程序的显示名称。 应用程序的用户在使用应用时(例如在登录期间)可能会看到显示名称。 可以随时更改显示名称,多个应用注册可以共享同一名称。 应用注册自动生成的应用程序 (客户端) ID(而不是其显示名称)在标识平台中唯一标识你的应用。
注册后,会创建多个 ID,稍后需要其中一些 ID 才能获取 OAuth 2.0 令牌。
添加 API 权限
在左侧菜单下,选择“ API 权限 ”,然后选择“ 添加权限”。
导航到组织使用的 API 并搜索Office 365 Exchange Online。
在 “请求 API 权限”下,依次选择“ 应用程序权限”、“ Mail.Send”和“ 添加权限”。
添加 API 权限后,管理员需要选择“ 授予管理员同意”。
我们同时支持:委托权限和应用程序权限,以允许旧版 OAuth 第三方应用程序,因为它们将应用程序权限用于应用机密。
委托权限:
- 在“API 权限”选项卡中,从 Office 365 Exchange Online\委托权限添加 Mail.Send API 权限。
- 在 “API 权限 ”选项卡中,选择“ 授予管理员同意”。
- 在“ 身份验证 ”选项卡中,启用 “允许公共客户端流”。
- 使用 HVE 邮件用户的凭据 为受众
https://outlook.office.com/.default
请求令牌。
应用程序权限:
- 在“API 权限”选项卡中,从 Office 365 Exchange Online\应用程序权限添加 Mail.Send API 权限。
- 在 “API 权限 ”选项卡中,选择“ 授予管理员同意”。
- 在“ 证书 & 机密 ”选项卡中,添加新的客户端密码。
- 使用 客户端密码 请求访问群体
https://outlook.office.com/.default
的令牌。
HVE SMTP 协议交换
若要对 SMTP 服务器连接进行身份验证,客户端必须使用格式的AUTH
SASL XOAUTH2
命令进行响应。
SASL XOAUTH2
使用以下格式将用户名和访问令牌编码在一起:
base64("user=" + userName + "^Aauth=Bearer " + accessToken + "^A^A")
^A
表示 Control + A (%x01
) 。
例如,SASL XOAUTH2
使用访问令牌EwBAAl3BAAUFFpUAo7J3Ve0bjLBWZWCclRC3EoAA
访问application@contoso.onmicrosoft.com
的格式为:
base64("user=application@contoso.onmicrosoft.com^Aauth=Bearer EwBAAl3BAAUFFpUAo7J3Ve0bjLBWZWCclRC3EoAA^A^A")
导致身份验证成功的示例客户端-服务器消息交换:
[connection begins]
C: auth xoauth2
S: 334
C: dXNlcj1hcHBsaWNhdGlvbkBjb250b3NvLm9ubWljcm9zb2Z0LmNvbQFBdXRoPUJlYXJlciBFd0JBQWwzQkFBVUZGcFVBbzdKM1ZlMGJqTEJXWldDY2xSQzNFb0FBAQE=
S: 235 2.7.0 Authentication successful
[connection continues...]
导致身份验证失败的示例客户端-服务器消息交换:
[connection begins]
C: auth xoauth2
S: 334
C: dXNlcj1hcHBsaWNhdGlvbkBjb250b3NvLm9ubWljcm9zb2Z0LmNvbQFBdXRoPUJlYXJlciBFd0JBQWwzQkFBVUZGcFVBbzdKM1ZlMGJqTEJXWldDY2xSQzNFb0FBAQE=
S: 535 5.7.3 Authentication unsuccessful